react中数据持久化缓存redux-persist
一、安装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的更多相关文章
- iphone开发中数据持久化之——属性列表序列化(一)
数据持久化是应用程序开发过程中的一个基本问题,对应用程序中的数据进行持久化存储,有多重不同的形式.本系列文章将介绍在iphone开发过程中数据持久化的三种主要形式,分别是属性列表序列号.对象归档化以及 ...
- IOS开发中数据持久化的几种方法--NSUserDefaults
IOS开发中数据持久化的几种方法--NSUserDefaults IOS 开发中,经常会遇到需要把一些数据保存在本地的情况,那么这个时候我们有以下几种可以选择的方案: 一.使用NSUserDefaul ...
- iOS中 数据持久化 UI高级_17
数据持久化的本质就是把数据由内写到本地(硬盘中),在iOS指将数据写到沙盒文件夹下: 沙盒机制:指的就是采用沙盒文件夹的形式管理应用程序的本地文件,而且沙盒文件夹的名字是随机分配的,采用十六进制方法命 ...
- objective C中数据持久化方式1--对象归档
第一.数据持久化的方式: NSKeyedArchiver--对象归档 属性列表化(NSArray.NSDictionary.NSUserDefault) SQlite数据库.CoreData数据库 其 ...
- iphone开发中数据持久化之——嵌入式SQLite(三)
前两篇分别讨论了使用属性列表的数据持久化.使用对象归档的数据持久化,本文将讨论第三个实现数据持久化的方法---嵌入式SQL数据库SQLite3.SQLite3在存储和检索大量数据方面非常有效.它还能够 ...
- QF——iOS中数据持久化的几种方式
数据持久化的几种方式: 一.属性列表文件: .plist文件是种XML文件.数组,字典都可以和它互相转换.数组和字典可以写入本地变成plist文件.也可以读取本地plist文件,生成数组或字典. 读取 ...
- React中refs持久化
根据使用React的版本,选择合适的方法. 字符串模式 :废弃不建议使用 回调函数,React版本 < 16.3 React.createRef() :React版本 >= 16.3 回调 ...
- iphone开发中数据持久化之——模型对象归档(二)
在Cocoa世界中,术语“归档”是指另一种形式的序列化,它可以实现对任何对象的序列化.使用对模型对象进行归档的技术可以轻松将复杂的对象写入文件,然后再从中读取它们.只要在类中实现的每个属性都是标量(如 ...
- iOS开发中数据持久化
使用几个小例子分别实现 归档NSKeyedArchiver.NSUserDefaults.plist文件数据存储,简单直观.代码地址
随机推荐
- 求两个排序数组的交集和并集----时间复杂度O(n+m)
问题: 给你两个排序的数组,求两个数组的交集. 比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5,n是a数组大小,m是b数组大小. 思路: (1)从b数组遍历取 ...
- Nginx数据结构之内存池
基本结构 1. ngx_pool_t struct ngx_pool_s { ngx_pool_data_t d; size_t max; ngx_pool_t *current; ngx_chain ...
- Flume-安装与 NetCat UDP Source 监控端口
Flume 文档:https://flume.apache.org/FlumeUserGuide.html Flume 下载:https://archive.apache.org/dist/flume ...
- React Native 日常报错
在学习React.js 或 React Native 过程中,有时看着别人的框架或代码,但总是会出现错误,因为React或之中用到的一些包经常更新,有些代码或教程就显得过旧了. 一.日常报错 'con ...
- Android-Glide使用
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Li_Qing_Xue/article/details/78919499 图片加载很是重要,我也对比过 ...
- jenkins 基于角色的权限管理
如何给不同的用户分配不同的项目权限呢,今天来介绍这个 1 (全局安全设置)启用角色->2新建用户->3新建jenkins 全局角色 builder 并分配如下图3中所示权限(并分配Ove ...
- vscode 设置 eclipse 快捷键
点击安装之后,默认就是要ecliplse快捷键了 注意:部分快捷键可能会由于和原来的冲突而失效,例如快速在“下面插入行” ,我还是不能使用ecliplse的Shift+Enter,而要用Ctrl+En ...
- python 生成词云
1.知识点 """ WordCloud参数讲解: font_path表示用到字体的路径 width和height表示画布的宽和高 prefer_horizontal可以调 ...
- 004-Spring boot 快速入门-项目搭建与启动、SpringBootApplication、启动图标
一.官方地址 Spring:http://spring.io/ Spring Project:http://spring.io/projects Spring boot:https://project ...
- maven settings.xml详解
setting.xml配置文件 http://blog.csdn.net/u012152619/article/details/51485152 maven的配置文件settings.xml存在于两个 ...