Runes 是 Svelte 5 引入的一套以美元符号($)开头的编译器指令,用于显式声明响应式行为。它们看起来像函数调用,但不需要导入、不能作为普通值赋值,且只在特定的语法位置生效,取代了 Svelte 4 中隐式的响应式写法。
$state 用于声明响应式变量。基本类型的读写会被自动追踪;对象和数组会被包装为深响应式代理,对其属性的增删改都能触发更新,避免了 Svelte 4 中必须整体重新赋值才能触发响应的限制。
derived用于声明依赖其他状态计算得出的派生值,当依赖发生变化时自动重算。派生表达式应保持纯净,不应在其中写入副作用。对于多语句的复杂派生,可使用derived用于声明依赖其他状态计算得出的派生值,当依赖发生变化时自动重算。派生表达式应保持纯净,不应在其中写入副作用。对于多语句的复杂派生,可使用derived.by 形式。
effect用于声明副作用逻辑,例如在依赖变化后同步DOM之外的资源、发起网络请求等。它在依赖变化且DOM更新后执行,可返回清理函数;此外还有effect用于声明副作用逻辑,例如在依赖变化后同步DOM之外的资源、发起网络请求等。它在依赖变化且DOM更新后执行,可返回清理函数;此外还有effect.pre(在 DOM 更新前执行)和 $effect.root(在挂载时执行一次)等变体。