详解在React-Native中持久化redux数据


Posted in Javascript onMay 22, 2019

在最近的一个项目中,要求对 redux 数据做持久化处理,经过研究后成功实现,在此记录一下过程

我们可以使用 redux-persist 对数据做持久化处理

安装

npm i --save redux-persist

使用

安装成功后,我们需要对 store 代码进行修改,这是我的 store 生成文件

import {applyMiddleware, createStore, compose} from 'redux';
import {createLogger} from 'redux-logger';
import thunk from 'redux-thunk';
import reducers from '../reducers';
import {persistStore, persistReducer} from 'redux-persist';
import storage from 'redux-persist/lib/storage'

const persistConfig = {
 key: 'milk', # 对于数据 key 的定义
 storage,  # 选择的存储引擎
}

# 对 reducers 的封装处理
const persistedReducer = persistReducer(persistConfig, reducers)


let loggerMiddleware = createLogger();

export default function configureStore() {
 const enhancers = compose(
  applyMiddleware(thunk, loggerMiddleware),
 );

 # 处理后的 reducers 需要作为参数传递在 createStore 中
 const store = createStore(persistedReducer, enhancers)

 # 持久化 store
 let persistor = persistStore(store)
 
 return {store, persistor}
}

在 react-native 中,存储引擎默认为 AsyncStorage

Android是以key=>value的形式存储在本地sqlite中

iOS 是直接存沙盒文件

其中还有很多可以配置的地方,大家自行参考官方文档

修改完生成 store 代码后,在入口文件做一次修改,需要引入 PersistGate 来进行二次的组装

import React, {Component} from 'react';
import {Provider} from 'react-redux';
import HomeContainer from './container/HomeContainer'
import configureStore from './redux/store'
import {PersistGate} from 'redux-persist/integration/react' # 看这里


const {store, persistor} = configureStore();

class App extends Component {
 render() {
  return (
   <Provider store={store}>
    
    <PersistGate loading={null} persistor={persistor}>
     <HomeContainer/>
    </PersistGate>

   </Provider>
  );
 }
}

export default App

简单配置即可,我们可以看一下效果

效果

详解在React-Native中持久化redux数据

参考文档

官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 中{},[]中括号,大括号使用详解
May 12 Javascript
关于跨站脚本攻击问题
Dec 22 Javascript
JS控制图片等比例缩放的示例代码
Dec 24 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
Dec 23 Javascript
angularjs数组判断是否含有某个元素的实例
Feb 27 Javascript
vue-router中scrollBehavior的巧妙用法
Jul 09 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
Feb 10 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
Oct 28 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
May 22 #Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 #Javascript
jQuery Migrate 插件用法实例详解
May 22 #jQuery
自定义Vue组件打包、发布到npm及使用教程
May 22 #Javascript
Vue中的组件及路由使用实例代码详解
May 22 #Javascript
Vue侦测相关api的实现方法
May 22 #Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 #Javascript
You might like
星际玩家的三大定律
2020/03/04 星际争霸
社区(php&amp;&amp;mysql)三
2006/10/09 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
JavaScript实现简单图片翻转的方法
2015/04/17 Javascript
高性能JavaScript DOM编程(1)
2015/08/11 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
董事长秘书职责
2014/01/31 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
小学生读书活动总结
2014/06/30 职场文书
师范毕业生求职信
2014/07/11 职场文书
社区综治工作汇报
2014/10/27 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
Python访问Redis的详细操作
2021/06/26 Python
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL