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 获取URL参数的插件
Mar 04 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
js控制web打印(局部打印)方法整理
May 29 Javascript
JQuery加载图片自适应固定大小的DIV
Sep 12 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
JavaScript的Date()方法使用详解
Jun 09 Javascript
jQuery日程管理插件fullcalendar使用详解
Jan 07 Javascript
通过js修改input、select默认字体颜色
Apr 19 Javascript
angular+webpack2实战例子
May 23 Javascript
vue-cli3跨域配置的简单方法
Sep 06 Javascript
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
深入详解JS函数的柯里化
Jun 09 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和MySQL保存和输出图片
2006/10/09 PHP
如何使用PHP往windows中添加用户
2006/12/06 PHP
基于php 随机数的深入理解
2013/06/05 PHP
php获取文件大小的方法
2014/02/26 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
python处理大数字的方法
2015/05/27 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
Tostadora意大利:定制T恤
2019/04/08 全球购物
公司员工检讨书
2014/02/08 职场文书
房屋转让协议书范本
2014/04/11 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
雷峰塔导游词
2015/02/09 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书