mirror of
https://github.com/pmndrs/zustand.git
synced 2025-12-08 19:45:52 +00:00
Update how to reset state doc (#1495)
* Update how to reset state doc * Minor fixes * Minor changes * Minor changes * Minor changes * Minor changes
This commit is contained in:
parent
4a99653967
commit
b8850550cb
@ -27,7 +27,7 @@ const initialState: State = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create store
|
// create store
|
||||||
const useSlice = create<State & Actions>((set, get) => ({
|
const useSlice = create<State & Actions>()((set, get) => ({
|
||||||
...initialState,
|
...initialState,
|
||||||
|
|
||||||
addSalmon: (qty: number) => {
|
addSalmon: (qty: number) => {
|
||||||
@ -44,30 +44,24 @@ const useSlice = create<State & Actions>((set, get) => ({
|
|||||||
}))
|
}))
|
||||||
```
|
```
|
||||||
|
|
||||||
Resetting multiple stores at once instead of individual stores
|
Resetting multiple stores at once
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
import _create, { StateCreator, StoreApi, UseBoundStore } from 'zustand'
|
import _create, { StateCreator } from 'zustand'
|
||||||
|
|
||||||
const resetters: (() => void)[] = []
|
const resetters: (() => void)[] = []
|
||||||
|
|
||||||
export const create = <TState extends unknown>(
|
export const create = (<T extends unknown>(f: StateCreator<T> | undefined) => {
|
||||||
createState: StateCreator<TState> | StoreApi<TState>
|
if (f === undefined) return create
|
||||||
): UseBoundStore<StoreApi<TState>> => {
|
const store = _create(f)
|
||||||
// We need to use createState as never to support StateCreator<TState> and
|
const initialState = store.getState()
|
||||||
// StoreApi<TState> at the same time.
|
|
||||||
// We also need to re-type slice to UseBoundStore<StoreApi<TState>>
|
|
||||||
const slice: UseBoundStore<StoreApi<TState>> = _create(createState as never)
|
|
||||||
const initialState = slice.getState()
|
|
||||||
|
|
||||||
resetters.push(() => {
|
resetters.push(() => {
|
||||||
slice.setState(initialState, true)
|
store.setState(initialState, true)
|
||||||
})
|
})
|
||||||
|
return store
|
||||||
|
}) as typeof _create
|
||||||
|
|
||||||
return slice
|
export const resetAllStores = () => {
|
||||||
}
|
|
||||||
|
|
||||||
export const resetAllSlices = () => {
|
|
||||||
for (const resetter of resetters) {
|
for (const resetter of resetters) {
|
||||||
resetter()
|
resetter()
|
||||||
}
|
}
|
||||||
@ -78,3 +72,4 @@ export const resetAllSlices = () => {
|
|||||||
|
|
||||||
- Basic: https://codesandbox.io/s/zustand-how-to-reset-state-basic-demo-rrqyon
|
- Basic: https://codesandbox.io/s/zustand-how-to-reset-state-basic-demo-rrqyon
|
||||||
- Advanced: https://codesandbox.io/s/zustand-how-to-reset-state-advanced-demo-gtu0qe
|
- Advanced: https://codesandbox.io/s/zustand-how-to-reset-state-advanced-demo-gtu0qe
|
||||||
|
- Immer: https://codesandbox.io/s/how-to-reset-state-advance-immer-demo-nyet3f
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user