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 相关文章推荐
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
Oct 01 Javascript
很棒的学习jQuery的12个网站推荐
Apr 28 Javascript
50个比较实用jQuery代码段
Sep 18 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
JS模拟自动点击的简单实例
Aug 08 Javascript
javascript操作css属性
Dec 30 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
Nov 02 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
Oct 08 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
Jun 20 Javascript
JS使用tofixed与round处理数据四舍五入的区别
Oct 25 Javascript
jQuery实现动态向上滚动
Dec 21 jQuery
微信小程序实现简易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对XML的操作详解
2013/06/07 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
自写的一个jQuery圆角插件
2010/10/26 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
vue2.0实现音乐/视频播放进度条组件
2018/06/06 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
js canvas实现五子棋小游戏
2021/01/22 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python中查看文件名和文件路径
2017/03/31 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
python pandas生成时间列表
2019/06/29 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python assert关键字原理及实例解析
2019/12/13 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
德国隐形眼镜店:LuckyLens
2018/07/29 全球购物
请假条标准格式规范
2014/04/10 职场文书
硕士生找工作求职信
2014/07/05 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
优秀党支部申报材料
2014/12/24 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
2015学校年度工作总结
2015/05/11 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技