{appName}
反馈列表:
-
{#each feedbackItems as item}
- {item.text} - 评分: {item.rate} {/each}
在svelte开发中,理解如何正确导入数据和组件至关重要。svelte文件定义的是组件而非普通javascript模块,若需共享纯数据,应使用`.js`文件进行导出。本文将详细阐述svelte的导入机制,并通过示例代码展示如何区分导入数据与渲染组件,从而避免常见的导入错误,确保项目结构清晰且功能正确。
当你在Svelte项目中导入一个.svelte文件时,例如 import Feedback from './components/feedbacks.svelte';,你实际上导入的是该Svelte组件的构造函数(或组件定义)。这意味着 Feedback 变量现在代表的是一个可以被渲染的Svelte组件类,而不是该组件内部
原始问题中的代码尝试将导入的组件构造函数直接渲染为文本:
{feedback}
。由于 feedback 在这里是一个组件构造函数,Svelte会尝试将其转换为字符串,结果就得到了一个代表组件类的字符串表示,而非预期的数组数据。错误信息 Props cannot be read directly from the component instance... 也进一步印证了这一点,因为它表明你正在尝试像访问普通对象属性一样访问组件实例的内部,而这并非Svelte组件的预期用法。如果你只是想在不同的Svelte组件之间共享一些纯数据(如数组、对象或常量),那么最简洁和推荐的方式是使用标准的JavaScript文件(.js 或 .ts)。这样,你就可以利用ES模块的导出和导入机制,直接获取数据。
示例:共享反馈数据
创建数据文件 data/feedbackData.js:
// data/feedbackData.js
export const feedbackItems = [
{ text: '这是一个很棒的反馈!', rate: 9 },
{ text: '体验还不错。', rate: 7 },
{ text: '有待改进。', rate: 4 }
];
// 你也可以导出其他数据或函数
export const appName = 'Svelte反馈应用';在 App.svelte 中导入并使用数据:
{appName}
反馈列表:
{#each feedbackItems as item}
- {item.text} - 评分: {item.rate}
{/each}
通过这种方式,App.svelte 可以直接访问 feedbackItems 数组,并按预期渲染其内容。
如果你的 .svelte 文件确实旨在作为一个可复用的UI组件,那么你需要将其作为组件进行导入和渲染。Svelte组件通常会接受属性(props)来定制其行为或显示内容。
示例:创建和使用反馈列表组件
创建反馈列表组件 components/FeedbacksList.svelte: 这个组件将负责接收一个反馈数组并渲染它。
详细反馈:
{#if feedbacks.length > 0}
暂无反馈。
{/if}在 App.svelte 中导入并渲染组件:
我的Svelte反馈应用
在这个例子中,FeedbacksList 被正确地导入为一个组件,并通过
遵循这些原则将帮助你构建结构清晰、易于维护且高效的Svelte应用程序。