A small, fast and scaleable bearbones state-management solution. Has a comfy api based on hooks, isn't boilerplatey or opinionated, but still just enough to be explicit and flux-like. ——zustand
瞎想了一个掘金 style 标题:《还在学 Redux?不妨提前学下它以后的替代品!》
一个真正的易用的状态管理工具不需要过多复杂的概念,但这往往是设计过程中就要去思考到的,但我觉得使用者对于工具的设计感和创造者对于工具的设计感有时候会出现冲突,往往后者会沉溺于复杂的构建中,逐渐也就淡化了用户的感受。
Zustand 的状态管理脱离于 React 组件自身的状态,它是作为一个可控的第三方状态存储。它的状态可以被多个 React 组件共享,而且状态的更新也会随 Reconciler 的流程而进行。
Zustand 和 Redux 一样,都是将状态保存在一个对象里,当然你可以创建多个 store 来分离状态,但他们在逻辑上是分开的。(与之相对的是 recoil / jotai 的原子化状态管理工具)
Zustand 是一个外部的世界,而 Zustand 自己的工厂函数创建的 hooks 能够连接外部世界和 React 的世界。
由于 React 是各组意义上的单向数据流,没有数据向上回溯的能力,只能单向向下分发数据以及组件内部自行管理自己的数据。
这样就导致了多层嵌套的组件要重复定义数据接口的后果,并且这个后果在各方面减缓了业务迭代速度,并大大增加了项目的维护难度。
我们或许可以使用 Context 来进行解决,比如 react-redux 使用了 Context ,将 store 和 dispatch 作为 React 上下文在所 Provider 的组件内通过 useContext / Consumer / this.context 被获取。
而 Redux 在尿性和特点上也与 React 相吻合,数据中心化处理,单向分发。
所有的状态管理工具都不约而同的使用了观察者模式,可以说状态这个概念本身就是为其而生,详细原因可以参考: