mirror of
https://github.com/pmndrs/zustand.git
synced 2025-12-08 19:45:52 +00:00
43 lines
1009 B
Markdown
43 lines
1009 B
Markdown
---
|
|
title: Practice with no store actions
|
|
nav: 6
|
|
---
|
|
|
|
The recommended usage is to colocate actions and states within the store (let your actions be located together with your state).
|
|
|
|
For example:
|
|
|
|
```js
|
|
export const useBoundStore = create((set) => ({
|
|
count: 0,
|
|
text: 'hello',
|
|
inc: () => set((state) => ({ count: state.count + 1 })),
|
|
setText: (text) => set({ text }),
|
|
}))
|
|
```
|
|
|
|
This creates a self-contained store with data and actions together.
|
|
|
|
---
|
|
|
|
An alternative approach is to define actions at module level, external to the store.
|
|
|
|
```js
|
|
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 })
|
|
```
|
|
|
|
This has a few advantages:
|
|
|
|
- It doesn't require a hook to call an action;
|
|
- It facilitates code splitting.
|
|
|
|
While this pattern doesn't offer any downsides, some may prefer colocating due to its encapsulated nature.
|