现时需要使用react-native-storage本地存储

第一步:配置storage主文件

mystorage.js

import { AsyncStorage } from 'react-native';
import Storage from 'react-native-storage'; import sync from './sync'; let storage = new Storage({
// 最大容量,默认值1000条数据循环存储
size: 1000, // 存储引擎:对于RN使用AsyncStorage,对于web使用window.localStorage
// 如果不指定则数据只会保存在内存中,重启后即丢失
storageBackend: AsyncStorage, // 数据过期时间,默认一整天(1000 * 3600 * 24 毫秒),设为null则永不过期
defaultExpires: 1000 * 3600 * 1,//一个小时 // 读写时在内存中缓存数据。默认启用。
enableCache: true, // 如果storage中没有相应数据,或数据已过期,
// 则会调用相应的sync方法,无缝返回最新数据。
// sync方法的具体说明会在后文提到
// 你可以在构造函数这里就写好sync的方法
// 或是写到另一个文件里,这里require引入
// 或是在任何时候,直接对storage.sync进行赋值修改
// sync: require('./sync')
}) storage.sync = sync; // 全局变量
global.storage = storage;

第二步:配置storage的sync方法

sync.js

import { default_API_url } from '../config/index';

const sync = {
// sync方法的名字必须和所存数据的key完全相同
// 方法接受的参数为一整个object,所有参数从object中解构取出
// 这里可以使用promise。或是使用普通回调函数,但需要调用resolve或reject。
issue(params) {
let { id, resolve, reject, syncParams: { extraFetchOptions, someFlag } } = params; fetch(default_API_url + '/issue/', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': extraFetchOptions.token
},
// body: 'id=' + id,
...extraFetchOptions,
}).then(response => {
return response.json();
}).then(json => {
console.log(json);
if (json && json.results) {
storage.save({
key: 'issue',
id,
data: json.results
}); if (someFlag) {
// 根据syncParams中的额外参数做对应处理
} // 成功则调用resolve
resolve && resolve(json.results);
}
else {
// 失败则调用reject
reject && reject(new Error('data parse error'));
}
}).catch(err => {
console.warn(err);
reject && reject(err);
});
}
} export default sync;

第三步:App.js调用storage主文件

//storage
import storage from './src/util/myStorage';

第四步:应用中调用

homeComponent.js

storage.load({
key: 'issue', // autoSync(默认为true)意味着在没有找到数据或数据过期时自动调用相应的sync方法
autoSync: true, // syncInBackground(默认为true)意味着如果数据过期,
// 在调用sync方法的同时先返回已经过期的数据。
// 设置为false的话,则等待sync方法提供的最新数据(当然会需要更多时间)。
syncInBackground: true, // 你还可以给sync方法传递额外的参数
syncParams: {
extraFetchOptions: {
// 各种参数
token: this.props.userEntity.token
},
someFlag: true,
},
}).then(ret => {
// 如果找到数据,则在then方法中返回
// 注意:这是异步返回的结果(不了解异步请自行搜索学习)
// 你只能在then这个方法内继续处理ret数据
// 而不能在then以外处理
// 也没有办法“变成”同步返回
// 你也可以使用“看似”同步的async/await语法 console.log(ret);
this.setState({ issueData: ret });
}).catch(err => {
//如果没有找到数据且没有sync方法,
//或者有其他异常,则在catch中返回
console.warn(err.message);
switch (err.name) {
case 'NotFoundError':
// TODO;
break;
case 'ExpiredError':
// TODO
break;
}
})

react native 增加react-native-storage的更多相关文章

  1. React Native之React速学教程(下)

    概述 本篇为<React Native之React速学教程>的最后一篇.本篇将带着大家一起认识ES6,学习在开发中常用的一些ES6的新特性,以及ES6与ES5的区别,解决大家在学习Reac ...

  2. Native VS React Native VS 微信小程序

    随着React Native和 微信小程序的出现,Native一家独大的局面出现裂痕,很多小公司使用已经正在着手微信小程序和React Native了,我公司就已经走上React Native之路.那 ...

  3. React Native & react-native-web-player & React Native for Web

    React Native & react-native-web-player & React Native for Web https://github.com/dabbott/rea ...

  4. React Native之React速学教程(中)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...

  5. React Native之React速学教程(上)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...

  6. 【React Native】React Native项目设计与知识点分享

    闲暇之余,写了一个React Native的demo,可以作为大家的入门学习参考. GitHub:https://github.com/xujianfu/ElmApp.git GitHub:https ...

  7. WHAT IS THE DIFFERENCE BETWEEN REACT.JS AND REACT NATIVE?

    Amit Ashwini - 09 SEPTEMBER 2017 React.js was developed by Facebook to address its need for a dynami ...

  8. React ToDolist增加功能

    补充知识点1==>npm install prop-types 先安装参数校验包 在B C页面引入 import PropTypes from 'prop-types' //参数限制 // 验证 ...

  9. 七天接手react项目 系列 —— react 路由

    其他章节请看: 七天接手react项目 系列 react 路由 本篇首先讲解路由原理,接着以一个基础路由示例为起点讲述路由最基础的知识,然后讲解嵌套路由.路由传参,最后讲解路由组件和一般组件的区别,以 ...

  10. react实战系列 —— react 的第一个组件

    react 的第一个组件 写了 react 有一个半月,现在又有半个月没写了,感觉对其仍旧比较陌生. 本文分两部分,首先聊一下 react 的相关概念,然后不使用任何语法糖(包括 jsx)或可能隐藏底 ...

随机推荐

  1. html 让一行文字居中

    文本在行高范围内垂直居中 可以利用行高特性让一行文本居中 line-height:100px://父容器的高度

  2. ? 初识Webx 3

    初识webx 2: http://www.cnblogs.com/lddbupt/p/5552351.html Webx Turbine建立在Webx Framework的基础上,实现了页面渲染.布局 ...

  3. redhat 7 安装oracle12.1

    https://oracle-base.com/articles/12c/oracle-db-12cr1-installation-on-oracle-linux-7   一定要配置yum本地源   ...

  4. 【Foreign】字串变化 [DP]

    字串变化 Time Limit: 10 Sec  Memory Limit: 128 MB Description 定义一个(大写字母)字符串集合{S},初始时值包含一个给定的字符串S1,每次从中任意 ...

  5. 【BZOJ1449&&2895】球队预算 [费用流]

    球队预算 Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 在一个篮球联赛里,有n支球队, 球 ...

  6. bzoj1862/1056: [Zjoi2006]GameZ游戏排名系统

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1862 http://www.lydsy.com/JudgeOnline/problem.ph ...

  7. bzoj 2956: 模积和 ——数论

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  8. java map 转 json 自编封装

    1.自编封装代码: import com.alibaba.fastjson.JSON; import java.util.*; public class jsonConversion { privat ...

  9. 20、redis和memcached比较?

    1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...

  10. python之提速千倍爆破一句话

    看了一下冰河大佬写的文章特别有感:https://bbs.ichunqiu.com/thread-16952-1-1.html 简单描述一下: 利用传统的单数据提交模式. 比如下面这个一句话木马: & ...