迁移到v4
唯一的破坏性变化在于类型。 如果你在使用TypeScript或者JSDoc类型注解的Zustand, 那么这个指南就适用于你。 否则,无需进行迁移。
此外,建议你首先阅读 新的TypeScript指南, 这样可以更容易理解迁移过程。
除了这个迁移指南, 你还可以查看 差异 在Zustand仓库中,从v3到v4的测试文件的差异。
create
适用的导入
import create from 'zustand'
import create from 'zustand/vanilla'
变更
- create:
- < State
- , StoreSetState = StoreApi<State>["set"]
- , StoreGetState = StoreApi<State>["get"]
- , Store = StoreApi<State>
- >
- (f: ...) => ...
+ create:
+ { <State>(): (f: ...) => ...
+ , <State, Mutators>(f: ...) => ...
+ }
迁移
如果你没有向 create
传递任何类型参数,那么不需要进行迁移。
如果你正在使用像 combine
或 redux
这样的 "叶子" 中间件,那么从 create
中移除所有类型参数。
否则, 将 create<T, ...>(...)
替换为 create<T>()(...)
。
StateCreator
适用的导入
import type { StateCreator } from 'zustand'
import type { StateCreator } from 'zustand/vanilla'
变更
- type StateCreator
- < State
- , StoreSetState = StoreApi<State>["set"]
- , StoreGetState = StoreApi<State>["get"]
- , Store = StoreApi<State>
- > =
- ...
+ type StateCreator
+ < State
+ , InMutators extends [StoreMutatorIdentifier, unknown][] = []
+ , OutMutators extends [StoreMutatorIdentifier, unknown][] = []
+ , Return = State
+ > =
+ ...
迁移
如果你正在使用 StateCreator
,你可能正在编写一个中间件或使用 "slices" 模式。对此,请查看 TypeScript 指南中的 编写中间件和高级用法 和 常见配方 部分。
PartialState
适用的导入
import type { PartialState } from 'zustand'
import type { PartialState } from 'zustand/vanilla'
变更
- type PartialState
- < T extends State
- , K1 extends keyof T = keyof T
- , K2 extends keyof T = K1
- , K3 extends keyof T = K2
- , K4 extends keyof T = K3
- > =
- | (Pick<T, K1> | Pick<T, K2> | Pick<T, K3> | Pick<T, K4> | T)
- | ((state: T) => Pick<T, K1> | Pick<T, K2> | Pick<T, K3> | Pick<T, K4> | T)
+ type PartialState<T> =
+ | Partial<T>
+ | ((state: T) => Partial<T>)