Jac*_* A. 2 svelte svelte-store
我正在学习 Svelte 教程,并且位于自定义商店页面 ( https://svelte.dev/tutorial/custom-stores )。示例代码是使用工厂函数编写的,createCount该函数会立即调用以创建导出的存储对象:
import { writable } from 'svelte/store';
function createCount() {
const { subscribe, set, update } = writable(0);
return {
subscribe,
increment: () => update(n => n + 1),
decrement: () => update(n => n - 1),
reset: () => set(0)
};
}
export const count = createCount();
Run Code Online (Sandbox Code Playgroud)
这样做的原因是什么,而不是像这样直接导出商店对象:
import { writable } from 'svelte/store';
const { subscribe, set, update } = writable(0);
export const count = {
subscribe,
increment: () => update(n => n + 1),
decrement: () => update(n => n - 1),
reset: () => set(0)
};
Run Code Online (Sandbox Code Playgroud)
ehr*_*ona 11
不同之处在于工厂可以用来创建多个独立的商店。一个商店的值可能是 4,另一家商店的值可能是 123。
在第二个代码块中,只能有一个商店。使用存储的任何代码都将看到相同的值,并且当一段代码更新该值时,这就是每个人都会看到的值。这称为“单例”。
也就是说,count在这两种情况下都是单例;您需要createCount再次调用以获取另一个商店(并且为了能够做到这一点,您需要导出该createCount函数)。
因此总而言之,这两段代码执行完全相同的操作,但是使用工厂的代码已准备好创建多个商店实例(即使它当前不这样做)。