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后$冲突的解决办法
Jul 09 Javascript
JqGrid web打印实现代码
May 31 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
jQuery获取与设置iframe高度的方法
Aug 01 Javascript
ES6新特性之Symbol类型用法分析
Mar 31 Javascript
vue用addRoutes实现动态路由的示例
Sep 15 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
May 10 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
layui 解决form表单点击无反应的问题
Oct 25 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
微信小程序实现简易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
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
html+js实现动态显示本地时间
2013/09/21 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
2016/03/06 Javascript
轻松掌握JavaScript代理模式
2016/08/26 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
vue中axios的二次封装实例讲解
2019/10/14 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
python实现简单爬虫功能的示例
2016/10/24 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
使用tensorflow实现线性回归
2018/09/08 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Python greenlet和gevent使用代码示例解析
2020/04/01 Python
英国户外装备和冒险服装零售商:alloutdoor
2018/01/30 全球购物
二年级数学教学反思
2014/01/21 职场文书
房地产公司见习自我鉴定
2014/04/28 职场文书
聘任证明怎么写
2015/03/02 职场文书
个人党性分析总结
2015/03/05 职场文书
2015政治思想表现评语
2015/03/25 职场文书
高中生物教学反思
2016/02/20 职场文书
MySQL中varchar和char类型的区别
2021/11/17 MySQL