一、安装redux-persist:

  npm install redux-persist --save

二、.babelrc中增加redux-persist配置:

"plugins": [
["import",
{
"libraryName": "redux-persist",
"libraryDirectory": "es"
}
],
]

三、在生成store的文件加入redux-persist配置:

import createMiddleware from './../redux/middleware/index';
import createReducer from './../redux';
import { persistReducer } from 'redux-persist';
import storage from 'redux-persist/es/storage'
import { applyMiddleware, createStore as _createStore } from 'redux';
import { routerMiddleware } from 'react-router-redux';
import { composeWithDevTools } from 'redux-devtools-extension'; const [__DEVELOPMENT__, __CLIENT__, __DEVTOOLS__] = [true, true, true]; const storageConfig = {
key: 'root',
storage, // storage is now required
blacklist: [], // reducer 里不持久化的数据
 whitelist: ['subject'] //reducer里持久化的数据
}
export default function createStore(history) {
// Sync dispatched route actions to the history const middleware = [createMiddleware(), routerMiddleware(history)]; let finalCreateStore;
if (__DEVELOPMENT__ && __CLIENT__ && __DEVTOOLS__) {
finalCreateStore = composeWithDevTools(
applyMiddleware(...middleware),
)(_createStore);
} else {
finalCreateStore = applyMiddleware(...middleware)(_createStore);
} const store = finalCreateStore(persistReducer(storageConfig, createReducer)); return store;
}

  集中的middleware文件是自己写的中间件:

import fetch from 'axios';
import { Dispatch } from 'react-redux'; export default function clientMiddleware() {
return ({ dispatch, getState }) => (next) => (action) => {
if (typeof action === 'function') {
return action(dispatch, getState);
} const { url, types, data = {}, method = 'get' , ...rest } = action;
if (!url) {
return next(action);
} const [REQUEST, SUCCESS, FAILURE] = types;
next({ ...rest, type: REQUEST });
const header = {
Accept: 'application/json',
'Content-Type': 'application/json'
};
const actionPromise = fetch({
url,
method,
headers: header,
data
});
actionPromise
.then(
result => next({ ...rest, data: result.data, type: SUCCESS }),
error => next({ ...rest, error, type: FAILURE })
)
.catch(error => {
console.error('MIDDLEWARE ERROR:', error);
next({ ...rest, error, type: FAILURE });
}); return actionPromise;
};
}

四、最后在index.js根文件夹下加入redux-persist:

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import registerServiceWorker from './registerServiceWorker';
import routes from './router/routes';
import StoreConfig from './redux/store';
import { Provider } from 'react-redux';
import { persistStore } from 'redux-persist';
import { PersistGate } from 'redux-persist/es/integration/react';
import { renderRoutes } from 'react-router-config';
import { ConnectedRouter } from 'react-router-redux';
import { createHashHistory } from 'history';
import 'antd/dist/antd.css'; const history = createHashHistory();
const store = StoreConfig(history);
const persistor = persistStore(store); ReactDOM.render(
<Provider store={store}>
<PersistGate persistor={persistor}>
<ConnectedRouter history={history} store={store}>
{renderRoutes(routes)}
</ConnectedRouter>
</PersistGate>
</Provider>,
document.getElementById('root')
);
registerServiceWorker();

经过上面的几步,redux-persist持久化缓存配置就完成了,在浏览器的localstorage里面可以看到数据已经存进去了

本文参考博客:

https://blog.csdn.net/ling369523246/article/details/84786962

react中数据持久化缓存redux-persist的更多相关文章

  1. iphone开发中数据持久化之——属性列表序列化(一)

    数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...

  2. IOS开发中数据持久化的几种方法--NSUserDefaults

    IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...

  3. iOS中 数据持久化 UI高级_17

    数据持久化的本质就是把数据由内写到本地(硬盘中),在iOS指将数据写到沙盒文件夹下: 沙盒机制:指的就是采用沙盒文件夹的形式管理应用程序的本地文件,而且沙盒文件夹的名字是随机分配的,采用十六进制方法命 ...

  4. objective C中数据持久化方式1--对象归档

    第一.数据持久化的方式: NSKeyedArchiver--对象归档 属性列表化(NSArray.NSDictionary.NSUserDefault) SQlite数据库.CoreData数据库 其 ...

  5. iphone开发中数据持久化之——嵌入式SQLite(三)

    前两篇分别讨论了使用属性列表的数据持久化.使用对象归档的数据持久化,本文将讨论第三个实现数据持久化的方法---嵌入式SQL数据库SQLite3.SQLite3在存储和检索大量数据方面非常有效.它还能够 ...

  6. QF——iOS中数据持久化的几种方式

    数据持久化的几种方式: 一.属性列表文件: .plist文件是种XML文件.数组,字典都可以和它互相转换.数组和字典可以写入本地变成plist文件.也可以读取本地plist文件,生成数组或字典. 读取 ...

  7. React中refs持久化

    根据使用React的版本,选择合适的方法. 字符串模式 :废弃不建议使用 回调函数,React版本 < 16.3 React.createRef() :React版本 >= 16.3 回调 ...

  8. iphone开发中数据持久化之——模型对象归档(二)

    在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...

  9. iOS开发中数据持久化

    使用几个小例子分别实现 归档NSKeyedArchiver.NSUserDefaults.plist文件数据存储,简单直观.代码地址

随机推荐

  1. python并发——信号量

    信号量通常用于保护数量有限的资源,例如数据库服务器.在资源数量固定的任何情况下,都应该使用有界信号量.在生成任何工作线程前,应该在主线程中初始化信号量. 工作线程生成后,当需要连接服务器时,这些线程将 ...

  2. Linux设备驱动程序 之 并发及其管理

    竞态产生 Linux系统找那个存在大量的并发联系,因此会导致可能的竞态: 1. 正在运行的用户空间进程可以以多种组合方式访问我们的代码: 2. SMP系统甚至可以再不同的处理器上同时执行我们的代码: ...

  3. NSLock的一些使用

    在多线程的编程环境中,锁的使用必不可少! 使用时,基本方法就是: [lock lock]; // 加锁 [obj yourMethod]; // 处理你的操作 [lock unlock]; // 解锁 ...

  4. LeetCode 112. 路径总和(Path Sum)

    题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum ...

  5. fastadmin编辑内容,有下拉选择关联的内容,自定义的参数去获取相应的下拉内容

    1.可以到你的编辑页面中添加自定义条件 data-params='{"custom[shop_id]":"2"}'

  6. Bootstrap4从入门到精通视频教程

    一.布局 0.课件1.Bootstrap介绍_栅格系统2.禁用响应式_响应式分界点 二.内容 3.排版_代码4.图片_图片框5.表格 三.公共样式 6.边框_浮动7.颜色_Display显示属性8.文 ...

  7. DeviceUtils

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> import androi ...

  8. o enclosing instance of type ArrayList_day02 is accessible. Must qualify the allocation with an enclosing instance of type ArrayList_day02

    错误日志: 这个错误是因为我创建的一个类,内中又创建了一个内部类,为什么呢在new内部类的时候出现错误呢,因为类中方法(函数)是在是在public static void main(String [] ...

  9. ssm整合用到的依赖jar包(不充足)

    <!--spring 的核心的jar包--><dependency> <groupId>org.springframework</groupId> &l ...

  10. weblogic密码重置----未做成

    1.备份DefaultAuthenticatorInit.ldift文件 [root@test4 ~]# find / -name DefaultAuthenticatorInit.ldift /ap ...