Svelte组件变量未定义常因脚本标签位置错误。所有逻辑代码需置于.svelte文件顶层script块,样式放style块,全局资源通过svelte:head组件引入。内部状态使用let声明,在Svelte5及以上版本中,推荐搭配$state()函数以提升响应式能力,避免变量未定义问题。
在Svelte开发中,一个常见的陷阱是模板中使用变量时编译报错“找不到某某变量”。这种情况十有八九是由于script标签放错了位置。
Svelte是一个组件编译器,而非普通HTML文件处理器。组件中的块必须位于.svelte文件的顶层,与模板、样式块平级。一旦将其放入或内部,Svelte编译器就会完全忽略它——该脚本块会降级为普通浏览器脚本,无法参与响应式绑定。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
内在用户提供的代码片段中, Svelte组件遵循严格的三段式布局——顺序可以调换,但必须各自独立、处于同一层级: Svelte的“魔法”完全依托于其约定的组件结构。将 侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述被放在内部,紧挨着{#each items as item}而言完全不存在,编译时报错Cannot find name 'items'也就不奇怪了。
正确的Svelte组件结构
{item.name}
关键注意事项
或里放。这不是Svelte的工作方式。所有组件逻辑必须出现在.svelte文件顶层的块中。块。内嵌在中的要么被忽略,要么引发SSR/SSG兼容性问题。Svelte自带的块会自动作用域化,既安全又好维护。。这是Svelte提供的专用组件,用于在页面层面注入全局资源:
export let items作为prop。此写法适用于父组件向子组件传递数据的场景。但在本例中,items是组件内部状态,直接用let items = [...]即可。在Svelte 5及以上版本,建议配合$state()以提升响应式可靠性,例如let items = $state([{name: "test"}]);。总结
放回组件顶层,移除冗余的HTML包裹,变量就能自然地暴露给模板——这是理解Svelte响应式模型的第一课,也是避免初学者90%编译错误的基石。