0

我正在阅读 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();

这样做的原因是什么,而不是像这样直接导出 store 对象:

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)
};
4

1 回答 1

6

不同之处在于工厂可用于创建多个独立的商店。一家商店的价值可能是 4,而另一家商店的价值可能是 123。

在您的第二个代码块中,只能有一个商店。任何使用 store 的代码都会看到相同的值,当一段代码更新该值时,这就是每个人都会看到的值。这被称为“单例”。

也就是说,count在这两种情况下都是单例;您需要createCount再次致电以获取另一家商店(并且能够做到这一点,您需要导出该createCount功能)。

所以总而言之,这两段代码做的事情完全相同,但是使用工厂的代码准备好创建多个商店实例(即使它目前没有这样做)。

于 2021-10-10T08:39:39.723 回答