用途:在 Svelte 项目中编写、编辑或分析组件时提供最佳实践指导,帮助写出快速、健壮、现代的 Svelte 代码。
主要能力与建议:
- $state:仅用于需要响应式的变量;对象和数组会深度响应,但需代理,有性能开销。仅被重新赋值(而非变更)的大对象(如 API 响应)宜用 $state.raw。
- $derived:从状态计算值应使用 $derived 而非 $effect;$derived 接收表达式而非函数,复杂表达式用 $derived.by。派生值可写,表达式变化时会重新求值;若表达式为对象或数组则按原样返回,不做深度响应。
- $effect:属于逃生舱,应尽量避免,尤其避免在 effect 内更新状态。同步外部库可用 {@attach ...};响应用户交互直接写在事件处理器或用函数绑定;调试用 $inspect;观察外部事物用 createSubscriber。不要用 if (browser) 包裹 effect 内容。
- $props:应视为会变化;依赖 props 的值通常用 $derived。
- $inspect.trace:响应式调试工具,可放在 $effect 或 $derived.by 首行追踪依赖。
- 事件:以 on 开头的属性视为事件监听器,支持属性简写与展开;window/document 监听用 svelte:window 和 svelte:document,避免 onMount 或 $effect。
- Snippets:在模板中声明可复用标记,用 {@render ...} 实例化或作为 props 传递。
- each 块:优先使用带 key 的 each 块以提升性能;key 须唯一,不要用索引;若需变更项则避免解构。
- 样式:可用 style: 指令设置 CSS 自定义属性;父组件控制子组件样式优先用 CSS 自定义属性,必要时用 :global。
- 上下文:优先用 context 而非共享模块状态,避免 SSR 时用户间泄漏;用 createContext 而非 setContext/getContext 以获得类型安全。
- 异步 Svelte:5.36 及以上可用 await 表达式和 hydratable,需在 svelte.config.js 启用 experimental.async,尚未完全稳定。
- 避免旧特性:新代码用 runes 模式,用 $state、$derived/$effect、$props、onclick、{#snippet}/{@render}、<DynamicComponent>、自导入组件、带 $state 字段的类、{@attach ...}、clsx 风格 class 属性,替代隐式响应式、$:、export let/$$props/$$restProps、on:click、<slot>/$$slots/svelte:fragment、svelte:component、svelte:self、stores、use:action、class: 指令。
限制:资料未提供安装命令、收费、平台或效果数据;异步特性需实验性配置且未完全稳定。