React通过redux-persist持久化数据存储的方法示例


Posted in Javascript onFebruary 14, 2019

在React项目中,我们经常会通过redux以及react-redux来存储和管理全局数据。但是通过redux存储全局数据时,会有这么一个问题,如果用户刷新了网页,那么我们通过redux存储的全局数据就会被全部清空,比如登录信息等。

这个时候,我们就会有全局数据持久化存储的需求。首先我们想到的就是localStorage,localStorage是没有时间限制的数据存储,我们可以通过它来实现数据的持久化存储。

但是在我们已经使用redux来管理和存储全局数据的基础上,再去使用localStorage来读写数据,这样不仅是工作量巨大,还容易出错。那么有没有结合redux来达到持久数据存储功能的框架呢?当然,它就是redux-persist。redux-persist会将redux的store中的数据缓存到浏览器的localStorage中。

redux-persist的使用

1、对于reducer和action的处理不变,只需修改store的生成代码,修改如下

import {createStore} from 'redux'
import reducers from '../reducers/index'
import {persistStore, persistReducer} from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';

const persistConfig = {
 key: 'root',
 storage: storage,
 stateReconciler: autoMergeLevel2 // 查看 'Merge Process' 部分的具体情况
};

const myPersistReducer = persistReducer(persistConfig, reducers)

const store = createStore(myPersistReducer)

export const persistor = persistStore(store)
export default store

2、在index.js中,将PersistGate标签作为网页内容的父标签

import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux'
import store from './redux/store/store'
import {persistor} from './redux/store/store'
import {PersistGate} from 'redux-persist/lib/integration/react';

ReactDOM.render(<Provider store={store}>
   <PersistGate loading={null} persistor={persistor}>
    {/*网页内容*/}
   </PersistGate>
  </Provider>, document.getElementById('root'));

这就完成了通过redux-persist实现React持久化本地数据存储的简单应用

3、最后我们调试查看浏览器中的localStorage缓存数据

React通过redux-persist持久化数据存储的方法示例

发现数据已经存储到了localStorage中,此时刷新网页,redux中的数据也不会丢失

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery 确定css方框模型(盒模型Box Model)
Jan 22 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
Aug 28 Javascript
AngularJS指令与指令之间的交互功能示例
Dec 14 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
详解vue mint-ui源码解析之loadmore组件
Oct 11 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
webpack源码之loader机制详解
Apr 06 Javascript
还不懂递归?读完这篇文章保证你会懂
Jul 29 Javascript
总结4个方面优化Vue项目
Feb 11 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
Vue组件之高德地图地址选择功能的实例代码
Jun 21 Javascript
Vue的双向数据绑定实现原理解析
Feb 17 Javascript
微信小程序实现简易table表格
Jun 19 #Javascript
微信小程序制作表格的方法
Feb 14 #Javascript
手把手带你封装一个vue component第三方库
Feb 14 #Javascript
微信小程序实现简单表格
Feb 14 #Javascript
手挽手带你学React之React-router4.x的使用
Feb 14 #Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
Feb 14 #jQuery
vue中各种通信传值方式总结
Feb 14 #Javascript
You might like
聊天室php&amp;mysql(一)
2006/10/09 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP获取访问页面HTTP状态码的实现代码
2016/11/03 PHP
php异常处理捕获错误整理
2019/09/23 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
python使用建议技巧分享(三)
2020/08/18 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
五分钟演讲稿
2014/04/30 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
民事答辩状范本
2015/05/21 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers