redux-persist 使用指南
1. 项目介绍
redux-persist 是一个用于 Redux 应用程序的持久化库,它允许开发者将 Redux 状态存储在本地存储(如 localStorage)或其他类型的存储中,在浏览器刷新或应用重启后仍能保持状态不变。这一特性对于提升用户体验尤其重要,因为它可以维持用户的操作上下文或者设置,实现状态的无缝衔接。
此库支持多种存储引擎,包括但不限于本地存储、sessionStorage、Realm 数据库,以及适用于 Web 扩展的特定存储。通过配置,你可以选择性地持久化特定的 Redux 子树,控制数据的合并策略,以及利用 PersistGate 来优雅地处理持久化的加载过程。
2. 快速启动
安装
首先,确保你的项目已经安装了 Redux 及其相关依赖。接下来,安装 redux-persist 和必要的存储适配器:
npm install redux-persist@latest
npm install --save-dev @react-redux/react-redux
# 假设你想使用localStorage作为存储
npm install redux-persist/lib/storage
配置 Redux Store
在你的 Redux 设置中集成 redux-persist:
import { createStore } from "redux";
import { persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage"; // 选用localStorage
import rootReducer from "./yourReducerFile";
const persistConfig = {
key: "primary",
storage,
};
const persistedReducer = persistReducer(persistConfig, rootReducer);
const store = createStore(persistedReducer);
const persistor = persistStore(store); // 创建持久化处理器
export { store, persistor };
使用PersistGate延迟渲染
在React应用的根组件处包裹 PersistGate,以等待持久化数据加载完毕后再渲染UI:
import { PersistGate } from "redux-persist/integration/react";
function App() {
return (
<Provider store={store}>
<PersistGate loading={null} persistor={persistor}>
<YourApp />
</PersistGate>
</Provider>
);
}
3. 应用案例和最佳实践
自定义重合策略
有时你可能希望控制如何合并远程和本地状态,例如使用 autoMergeLevel2 来浅合并状态:
import { autoMergeLevel2 } from "redux-persist/lib/stateReconciler";
const persistConfig = {
...,
stateReconciler: autoMergeLevel2,
};
版本控制
管理状态的版本更新,以便在升级应用时正确地迁移或清除旧数据:
const persistConfig = {
...,
version: 0, // 初始化版本号
};
黑白名单控制持久化
指定哪些部分的state需要被持久化或忽略:
const persistConfig = {
...,
whitelist: ['auth', 'settings'], // 持久化这些reducer
blacklist: ['tempData'], // 忽略这个reducer
};
4. 典型生态项目
在实际开发中,redux-persist常与其他生态系统内的工具结合使用,比如与redux-thunk或redux-saga共同管理异步逻辑,以及与redux-toolkit一起简化Redux应用的开发流程。虽然这些组合并非直接属于redux-persist生态,但它们是构建现代Redux应用的常见搭配。
为了优化开发体验,考虑使用redux-persist-transform-filter这样的插件进行更精细的数据过滤,或者redux-persist-exclude-shallow来排除不需要深度保存的状态分支。
记住,合理选择并整合这些工具,能够帮助你构建出既高效又灵活的应用程序。
以上就是对 redux-persist 的简要介绍和基础使用指南,根据具体需求调整配置,可以使你的应用程序具备更加丰富和人性化的状态管理能力。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0448
源启盛夏_AtomGit暑期开发者成长计划「源启盛夏」暑期校园开发者成长计划旨在激活校园开源力量,通过积分激励、认证扶持、资源倾斜等形式,引导高校组织和开发者完成「入驻 — 建项目 — 做贡献 — 获认证 — 得资源」的完整闭环。无论你是想带领社团入驻平台的组织者,还是希望用代码贡献证明自己的开发者,都能在这里找到属于你的成长路径。Markdown00
jiuwenswarmJiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0766
Hy3Hy3 是由腾讯混元团队研发的快慢思考融合的混合专家模型,总参数量 295B,激活参数 21B,MTP 层参数 3.8B。4 月底发布 Hy3 Preview 后,我们在 50 多个业务中获得了广泛的反馈,修复了各种体验问题,进一步提升了后训练的质量和规模。今天,我们发布 Hy3。它展现出显著强于同尺寸并比肩旗舰(参数规模往往是 Hy3 的 2~5 倍)开源模型的智能水平,显著提升了在各类产品和生产力任务中的实用价值。Python00
AscendNPU-IRAscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优C++0312
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00