用途:在 Svelte 项目中编写、编辑或分析组件时提供现代写法的实践指导,帮助避免过时 API 与常见错误。
主要能力与要点:
- $state:仅用于需要响应式的变量;对象与数组默认深度响应,大对象只做重新赋值时改用 $state.raw。
- $derived:用 $derived 计算结果而非 $effect;接受表达式而非函数,复杂情形用 $derived.by;派生值可写,表达式为对象或数组时不会被深度响应化。
- $effect:作为逃生舱尽量少用,尤其避免在其中更新状态;外部库同步可用 {@attach ...},事件响应用事件处理器或函数绑定,调试用 $inspect,外部观察用 createSubscriber。
- $props:把 props 视为会变化,依赖 props 的值通常用 $derived。
- 事件:以 on 开头的属性即事件监听,优先使用 onclick 等冒泡阶段处理器;window/document 监听用 svelte:window、svelte:document,避免 onMount 或 $effect。
- 片段与 each:用 {#snippet} 与 {@render} 定义复用标记;each 块建议使用键控,键须唯一且不要用索引,需要修改项时避免解构。
- 样式:用 style: 指令把 JS 变量设成 CSS 自定义属性;父组件通过 CSS 自定义属性控制子组件样式,必要时用 :global。
- 上下文:用 createContext 代替 setContext/getContext 以获得类型安全。
- 异步:5.36 及以上可用 await 表达式与 hydratable,但需在 svelte.config.js 开启 experimental.async,尚未完全稳定。
使用方式与限制:新代码使用 runes 模式,避免旧特性。SvelteKit 路由方面,保留落地页与工作区路由的区别,工作区相邻导航可用 data-sveltekit-noscroll 保持滚动位置,让路由参数拥有选中实体状态;改动事件处理器后需在浏览器中实际验证交互,不要凭 svelte-check 通过就认定行为正确。原文未提供安装命令与具体版本外的更多平台、收费信息。