学习 zustand

学习 zustand

代码库 https://gitee.com/nian_zuo_chen/learnrect/tree/master/zustand

安装

npm install zustand

常用

  • create 创建一个 store
  • set 函数修改 store 内容
  • get 函数,获取当前 store 中内容
  • store.getState() 静态获取当前 store 的所有内容
  • store.subscribe(listener) 订阅 store 变更,任意一个值变更,都会执行 listener
  • useShallow 可以开启浅比较,对象属性变化不触发

中间件

  • subscribeWithSelector 在创建 store 时候增加,允许订阅的时候增加选择器,来限制监听的范围 listener 中返回的数据和选择器选择的内容一致。
  • devtools 在创建 store 时候增加,结合 redux-dev-tools 浏览器插件可以查看 store 变化
  • 处理持久化,persist 开启持久化,createJSONStorage 使用 JSON.stringifyJSON.parse把值设置为 JSON 字符串进行存取

疑问

  • zustand.set 的返回值直接覆盖全部 state 还是做数据合并到 state 中?
    由第二个参数控制,默认是 false 标识数据合并,当返回 true 时候,是直接覆盖。

  • 当一次从 store 中获取多个数据时候,建议使用 zustand/react/shallow 有啥用?
    可以进行浅比较,避免没必要的渲染,和所有的浅比较一样,也会引入数据变化无感知的困惑,可以结合 devtools 来检查

  • 对比 UpdateObj.tsxUpdateObj2.tsxShallowEqual.tsx 中获取 store 数据的方式,为什么只有 UpdateObj.tsx 可以监听到变化?

    • UpdateObj.tsxUpdateObj2.tsx 都没有使用 useShallow
      但是 UpdateObj2.tsx(state) => stat.user 每次返回的都是 store 中的 user,所以对组件而言路径地址没变,所以不触发刷新。
      UpdateObj.tsx(state) => ({user: stat.user}) 每次返回的都是一个新的 {user: xxx} 对象,地址一直在变,所以触发刷新
    • UpdateObj.tsxShallowEqual.tsx 获取数据一样,每次都返回一个新的 {user: xxx} 对象,但是 useShallow 内的 shallow 算法是 Object.keys 一致,以及第一层的 obj[key] 的值一致(使用 Object.is 比较),就算做未变更,所以不触发刷新。在这两个组件中 {user: xxx} 虽然是两个对象,但是它们 kyes 一样都是 ["user"],然后指向的都是 stroe.user 这个地址一致,所以算作未变化。这要小心使用呀。shallow.ts 源码

相关推荐

  1. 学习 zustand

    2024-03-23 15:56:03       38 阅读
  2. zustand状态管理工具(react)

    2024-03-23 15:56:03       54 阅读
  3. react中zustand的使用

    2024-03-23 15:56:03       43 阅读
  4. React 使用 Zustand 详细教程

    2024-03-23 15:56:03       31 阅读
  5. react状态管理工具(redux、zustand

    2024-03-23 15:56:03       46 阅读
  6. React状态管理Zustand简单介绍和使用

    2024-03-23 15:56:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-23 15:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-23 15:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-23 15:56:03       82 阅读
  4. Python语言-面向对象

    2024-03-23 15:56:03       91 阅读

热门阅读

  1. 前端面试-手搓代码篇

    2024-03-23 15:56:03       34 阅读
  2. 构造函数(原型和原型链)

    2024-03-23 15:56:03       37 阅读
  3. SpringDataJpa大坑——一对多级联修改问题

    2024-03-23 15:56:03       33 阅读
  4. v-for=“item in arr“ 的理解

    2024-03-23 15:56:03       38 阅读
  5. 24计算机考研调剂 | 西北民族大学

    2024-03-23 15:56:03       43 阅读
  6. 面试算法-79-搜索旋转排序数组

    2024-03-23 15:56:03       44 阅读
  7. Vue 面试题(二)

    2024-03-23 15:56:03       46 阅读
  8. 003-基于Jetson Nano平台的在线二维码检测

    2024-03-23 15:56:03       45 阅读
  9. C语言判断回⽂字符串

    2024-03-23 15:56:03       39 阅读
  10. MySQL知识总结

    2024-03-23 15:56:03       37 阅读
  11. Linux - IO

    2024-03-23 15:56:03       39 阅读
  12. capl实现crc校验码计算

    2024-03-23 15:56:03       40 阅读
  13. 蓝桥杯/减肥/c\c++

    2024-03-23 15:56:03       31 阅读