
【免费下载链接】redux-localstorageStore enhancer that syncs (a subset) of your Redux store state to localstorage.项目地址https://gitcode.com/gh_mirrors/re/redux-localstorage点击查看免费下载redux-localstorage 是一个轻量级 Redux 状态持久化工具它以 store enhancer 的形式借助核心函数 persistState 将 Redux store 中的指定状态自动同步到浏览器 localStorage让数据在刷新页面后依然保留。本文从源码层面完整拆解它的工作原理带你搞懂「切片 → 序列化 → 写入 → 恢复」这条同步链路。一、先认识 redux-localstorage一行代码搞定状态持久化 在 React Redux 应用中store 里的数据是易失的——一刷新就没了。redux-localstorage 的做法很简单在创建 store 时挂上一个 enhancer之后每当状态变化就把你关心的那部分状态写进 localStorage下次打开页面时再读回来。使用方式只有三行import {compose, createStore} from redux import persistState from redux-localstorage const store createStore(reducer, compose(persistState(user, {key: my-app})))整个库的源码只有 5 个文件非常适合作为 Redux 中间件/增强器的学习范本文件职责persistState.js主入口store enhancer 本体createSlicer.js根据 paths 类型生成「切片函数」getSubset.js从 state 中挑出顶层 key得到子集mergeState.js将持久化数据与 initialState 合并typeOf.js类型判断void/string/array 分类二、persistState 的完整执行流程 persistState 是标准的双层柯里化结构见 persistState.jspersistState(paths, config)→ 返回 enhancer → enhancer 包裹next(reducer, initialState)→ 返回增强后的 store整个流程可以拆成 4 步按时间顺序依次发生。步骤 1️⃣ 配置合并默认值 用户覆盖函数一进来就把默认配置和用户传入的 config 合并persistState.jskeylocalStorage 的键名默认reduxslicer决定同步哪些状态默认用 createSlicer.jsserialize/deserialize默认JSON.stringify/JSON.parsemerge默认 mergeState.js这个设计就是 Redux 生态常见的「可覆盖策略」模式用普通 JS 对象时零配置即可用 immutable 集合时只需替换对应函数。步骤 2️⃣ 启动恢复读取 → 反序列化 → 合并在真正创建 store 之前它会尝试从 localStorage 把旧数据取回来persistState.jslocalStorage.getItem(key)取出序列化字符串deserialize还原成对象merge(initialState, persistedState)合并出最终的 initialState再把这份状态交给next(reducer, finalInitialState, enhancer)创建真正的 store合并逻辑很朴素mergeState.js有持久化数据就展开覆盖初始状态没有就直接用 initialState。步骤 3️⃣ 订阅 store每次 action 后自动写入这是整个库的灵魂所在persistState.jsstore.subscribe(function () { const subset slicerFn(store.getState()) localStorage.setItem(key, serialize(subset)) })也就是说任何 action dispatch 之后它都会重新取一次 state、切片、序列化、写回 localStorage。整个过程无需手动调用完全由 Redux 的订阅机制驱动。步骤 4️⃣ 容错只告警不崩溃 ️注意源码里有两处try/catch启动时读取失败比如旧数据格式损坏→console.warn应用照常启动写入失败比如 localStorage 配额已满→console.warn页面不白屏对新手来说这是个值得学习的工程习惯持久化层出任何错都不应拖垮业务本身。三、slicer 机制「部分同步」是如何实现的 ✂️为什么可以只同步user而不把整个 store 存进去答案在 createSlicer.js。它先看paths的类型返回不同的切片函数paths 传入值行为不传void同步整个 store字符串user只同步该顶层 key数组[user, theme]同步多个顶层 key其他类型console.error提示参数非法类型判断用的是定制版的 typeOf.js——它把 falsy 值和空数组统统归为void把 object 和 array 区分开非常务实。真正挑选数据的是 getSubset.js遍历 paths把存在且为 truthy 的 key 复制进一个新对象返回。它只支持顶层 key不支持a.b.c这种嵌套路径如果你需要更复杂的挑选逻辑官方方案是通过 config 传入自定义slicer见 README.md 的config.slicer说明。对应的测试用例在 createSlicer-test.js 和 getSubset-test.js 中覆盖了三种路径类型的行为非常值得一读。四、给新手的 3 条实战建议 一定要改默认的 key默认键名是redux同一浏览器下多个 Redux 应用会互相覆盖建议传{key: 你的项目名}。按需传入 paths只持久化真正需要的顶层状态如登录信息、用户偏好能省空间也避免把临时 UI 状态存进去。遇到 immutable 数据要换策略默认的JSON.stringify和对象展开合并对 immutable 集合无效此时可通过 config 覆盖serialize、deserialize、merge三个函数。五、总结 redux-localstorage 用不到 150 行代码讲清了状态持久化的完整闭环配置合并 → 启动时读回并合并 → 订阅 store → 切片 → 序列化 → 写 localStorage它没有引入任何依赖每一步都职责单一、可替换是理解 Redux store enhancer 机制和「可配置策略」设计模式的一个绝佳小样本。想动手验证可以运行npm test通过 Makefile 里的 mocha 用例观察各模块行为。赞分享【免费下载链接】redux-localstorageStore enhancer that syncs (a subset) of your Redux store state to localstorage.项目地址https://gitcode.com/gh_mirrors/re/redux-localstorage点击查看免费下载相关推荐ServerEngine Supervisor机制揭秘确保服务器24/7不间断运行的终极指南 ServerEngine Supervisor机制揭秘确保服务器24/7不间断运行的终极指南 ServerEngine Supervisor机制是构建后端如何用PyWxDump解密微信数据库并导出聊天记录为HTML完整实战指南如何用PyWxDump解密微信数据库并导出聊天记录为HTML完整实战指南 PyWxDump是一款面向微信PC端的数据读取与处理工具覆盖微信数据解密与微信聊天Cloudreve前端状态持久化localStorage与Redux PersistCloudreve前端状态持久化localStorage与Redux Persist 引言前端状态持久化的挑战与解决方案 在现代Web应用开发中前端状态持后端对象存储创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考