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改变Session的值(用ajax实现)
Dec 28 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
Nov 28 Javascript
document.execCommand()的用法小结
Jan 08 Javascript
JS中自定义定时器让它在某一时刻执行
Sep 02 Javascript
Javascript学习笔记之相等符号与严格相等符号
Nov 23 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
jQuery is not defined 错误原因与解决方法小结
Mar 19 Javascript
vue中页面跳转拦截器的实现方法
Aug 23 Javascript
给vue项目添加ESLint的详细步骤
Sep 29 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 Javascript
vue里input根据value改变背景色的实例
Sep 29 Javascript
vue两组件间值传递 $router.push实现方法
May 15 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 错误之引号中使用变量
2009/05/04 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
微信支付开发订单查询实例
2016/07/12 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JS解析json数据并将json字符串转化为数组的实现方法
2012/12/25 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
2017/10/30 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
如何使用JavaScript实现栈与队列
2019/06/24 Javascript
vue cli4下环境变量和模式示例详解
2020/04/09 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python进阶教程之模块(module)介绍
2014/08/30 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
HTML5实现一个能够移动的小坦克示例代码
2013/09/02 HTML / CSS
Linux Interview Questions For software testers
2012/06/02 面试题
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
求职个人评价范文
2014/04/09 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
交通违章检讨书
2014/09/21 职场文书
成绩报告单家长评语
2014/12/30 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
公司开业主持词
2015/07/02 职场文书
七年级上册生物的课件
2019/08/07 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS