Skip to main content

并不是所有的应用状态都存在于应用的组件结构中。有的值需要被多个互不相关的组件使用,或者被常规的 JavaScript 模块使用。

在 Svelte 中,我们通过 存储 (stores)实现这点。一个 store 就是一个带有 subscribe 方法的对象,当存储的值发生变化时用来通知感兴趣的订阅方。在 App.svelte 中,count 就是一个 store,我们在 count.subscribe 的回调函数中设置 count_value 的值。

打开 stores.js 查看 count 的定义。这是一个 可写 存储,表示除了 subscribe 方法之外,它还有 setupdate 方法。

现在,在 Incrementer.svelte 中,修改函数让 + 按钮起作用:

Incrementer.svelte
function increment() {
	count.update((n) => n + 1);
}

现在点击 + 按钮就会更新 count 了。同理修改 Decrementer.svelte

最后,在 Resetter.svelte 中,实现 reset

Resetter.svelte
function reset() {
	count.set(0);
}

Next: 自动订阅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
	import { count } from './stores.js';
	import Incrementer from './Incrementer.svelte';
	import Decrementer from './Decrementer.svelte';
	import Resetter from './Resetter.svelte';
 
	let count_value;
 
	count.subscribe((value) => {
		count_value = value;
	});
</script>
 
<h1>The count is {count_value}</h1>
 
<Incrementer />
<Decrementer />
<Resetter />
 
initialising