Skip to content

无存储操作的实践

推荐的用法是将操作和状态集中在存储中(让你的操作与你的状态位于一起)。

例如:

export const useBoundStore = create((set) => ({
count: 0,
text: 'hello',
inc: () => set((state) => ({ count: state.count + 1 })),
setText: (text) => set({ text }),
}))

这创建了一个自包含的存储,其中包含数据和操作。

另一种方法是在模块级别定义操作,这些操作位于存储之外。

export const useBoundStore = create(() => ({
count: 0,
text: 'hello',
}))
export const inc = () =>
useBoundStore.setState((state) => ({ count: state.count + 1 }))
export const setText = (text) => useBoundStore.setState({ text })

这有几个优点:

  • 它不需要一个钩子来调用一个操作;
  • 它有利于代码分割。

虽然这种模式没有任何缺点,但有些人可能更喜欢集中式的方法,因为它的封装性。