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 相关文章推荐
js操作select控件的几种方法
Jun 02 Javascript
javascript smipleChart 简单图标类
Jan 12 Javascript
jquery动画1.加载指示器
Aug 24 Javascript
js借助ActiveXObject实现创建文件
Sep 29 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
Nov 26 Javascript
解决jQuery使用JSONP时产生的错误
Dec 02 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
Jul 01 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
JavaScript利用正则表达式替换字符串中的内容
Dec 12 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 Javascript
vue多页面项目中路由使用history模式的方法
Sep 23 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
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
php后退一页表单内容保存实现方法
2012/06/17 PHP
基于empty函数的判断详解
2013/06/17 PHP
PHP开发实现微信退款功能示例
2017/11/25 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
详解JS中的立即执行函数
2017/02/24 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
实例讲解Python中浮点型的基本内容
2019/02/11 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
解除聘用合同证明书范本
2014/09/11 职场文书
初中生毕业评语
2014/12/29 职场文书
环保证明
2015/06/23 职场文书
八年级地理课件资料及考点知识分享
2019/08/30 职场文书