一、安装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. shell之列表的定义与循环

    字符串列表定义方法1: a=(f1 f2 f3 f4)for i in ${a[*]}#遍历每一个列表值 for i in ${a[@]}#等价与上一句 实例: #!bin/basha=(f1 f2 ...

  2. 【零基础】Selenium:Webdriver图文入门教程java篇(附相关包下载)

    一.selenium2.0简述 与一般的浏览器测试框架(爬虫框架)不同,Selenium2.0实际上由两个部分组成Selenium+webdriver,Selenium负责用户指令的解释(code), ...

  3. LC 980. Unique Paths III

    On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square.  There is e ...

  4. php缓存加速优化--Xcache

    1.安装软件:cd /usr/local/src/下载软件包wget http://xcache.lighttpd.net/pub/Releases/3.2.0/xcache- 3.2.0.tar.b ...

  5. python用cx_Oracle连接oracle

    确认版本: oracle版本:64位 python版本:64位 下载cx_Oracle的whl包:64位 安装whl包:pip install wheel cd到下载路径安装cx_Oracle的whl ...

  6. Python实现计算圆周率π的值到任意位的方法示例

    Python实现计算圆周率π的值到任意位的方法示例 本文实例讲述了Python实现计算圆周率π的值到任意位的方法.分享给大家供大家参考,具体如下: 一.需求分析 输入想要计算到小数点后的位数,计算圆周 ...

  7. delphi ADOCONNECTION异常拦截

    elphi ADOCONNECTION错误拦截错误框标题:   Debugger Exception Notification内容:   Project KJXX.exe raised excepti ...

  8. Git学习教程三之分支管理

    实战流程: 1:代码库克隆一份至本地 2:新分支操作 2.1  在需要的文件中创建并指向新的分支方便写代码  git checkout -b <name>                2 ...

  9. TensorFlow2.0(12):模型保存与序列化

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  10. 【CSS】我的颜色到底听谁的?—— css的层叠性

    我们之前学了很多个选择器,都可以帮我们定位到具体标签上,然后我们在设置样式.但这也不可避免会产生一个问题:如果多个选择器同时指向同一个标签,那么到底该听谁的??? css一定有自己的机制来处理这个问题 ...