本文来学习 zustand 的中间件机制 核心目标:设计一个通用、易于适配,可以多个中间件任意组合嵌套的中间件系统 设计思路 作为一个状态管理库,最重要的也就是 获取的行为、设置的行为、状态值 这三个东西。只要能控制住这些,就能自由实现各种功能。 而对于 zustand 来说,获取值是直接从对象中解构的,对获取的行为无法拦截,状态值在中间件阶段拿不到。 而鉴于 zustand 中,创建 store 就会有一次初始值的 set,且之后任何对值的修改都是需要执行 set 的,所以 设置的行为 是一个非常好的选择。 并且选择 set 还有一个更好的...
为什么需要框架适配? 为了提升开发体验,能够更好地利用框架的特性和框架的调试能力 完整代码 'use strict'; var React = require('react'); var vanilla = require('zustand/vanilla'); const identity = (arg) => arg; function useStore(api, selector = identity) { const slice = React.useSyncExternalStore( api.subscribe, () => sel...
摘要: 在本文中,我们逐步理解并实现状态管理的核心。首先,定义了记录当前状态(state)、获取(getState)、修改(setState)的三大功能。然后添加了发布订阅模式,当状态变化时通知所有订阅者。在今天就讨论了一组包含 enhance、createContext、createSlice 的 JavaScript 变体代码。后续章节将涵盖适配 React 框架的代码。文中还提到了性能优化,如避免重复更新状态。这些概念共同构成了 Zustand 库的基石。
源码内部是 TS 的,我们暂时先只关注最核心的 JS 功能实现 你问我怎么只看 JS ?当然是看编译后的产物啦 完整代码 'use strict'; const createStoreImpl = (createState) => { let state; const listeners = /* @PURE */ new Set(); const setState = (partial, replace) => { const nextState = typeof partial === "function" ? partial(stat...