Skip to main content
Svelte 基础
介绍
响应式
属性
逻辑
事件
绑定
类和样式
Actions
过渡动画
Svelte 进阶
高级响应性
复用内容
Motion
高级绑定
高级过渡效果
Context API
特殊元素
<script module>
后续步骤
SvelteKit 基础
介绍
路由
加载数据
请求头和 Cookie
共享模块
表单
API 路由
$app/state
错误和重定向
SvelteKit 进阶
钩子函数
页面选项
链接选项
高级路由
高级加载
环境变量
结论

在 Svelte 5 引入 runes 之前,Stores 是在组件外处理响应式状态的惯用方式。虽然现在情况已经改变,但在使用 Svelte(包括目前的 SvelteKit)时,你仍会遇到 stores,所以了解如何使用它们很有价值。

我们不会介绍如何创建自定义 stores — 相关内容请查看文档

让我们重新回顾通用响应式练习中的示例,这次我们使用 stores 来实现共享状态。

shared.js 中,我们目前导出的 count 是一个数字。将它转换为一个可写入(writable) 的 store:

shared
import { writable } from 'svelte/store';

export const count = writable(0);

要引用 store 的值,我们在其前面添加 $ 前缀。在 Counter.svelte 中,更新 <button> 内的文本,使其不再显示 [object Object]

Counter
<button onclick={() => {}}>
	clicks: {$count}
</button>

最后,添加事件处理程序。由于这是一个可写入的 store,我们可以使用它的 setupdate 方法以编程方式更新值...

count.update((n) => n + 1);

...由于我们在组件中,我们可以继续使用 $ 前缀:

Counter
<button onclick={() => $count += 1}>
	clicks: {$count}
</button>

在 GitHub 编辑此页面

1
2
3
4
5
6
7
8
<script>
	import Counter from './Counter.svelte';
</script>
 
<Counter />
<Counter />
<Counter />