正在加载,请稍候…

Svelte 5 Runes:细粒度响应式原理解析

学习 Svelte 5 的 runes——$state、$derived、$effect、$props 以及在 .svelte.ts 文件中的可移植响应式用法。

Svelte 5 Runes:细粒度响应式原理解析

Svelte 5 Runes

显式响应式,同样适用于 .svelte 文件之外。

<script>
  let count = $state(0)
  let doubled = $derived(count * 2)
  let user = $state({ name: 'Alice', scores: [] })

  $effect(() => {
    document.title = 'Count: ' + count
    return () => { document.title = 'App' }
  })

  let { name = 'World', ...rest } = $props()
</script>

<button onclick={() => count++}>{count} x2 = {doubled}</button>

Svelte 5 Runes:细粒度响应式原理解析插图

片段(替代插槽)

<script>
  let { title, children, footer } = $props()
</script>
<div class="card">
  <h2>{title}</h2>
  {@render children()}
  {#if footer}{@render footer()}{/if}
</div>

Svelte 5 Runes:细粒度响应式原理解析插图

可移植响应式(.svelte.ts)

export class Counter {
  count = $state(0)
  doubled = $derived(this.count * 2)
  increment() { this.count++ }
}

-> 使用 JSON Viewer 分析存储数据。