当前位置:   article > 正文

从零开始学React Native之数据持久化存储_rn持久化

rn持久化

数据持久化就是指应用程序将某些数据存储在手机存储空间中。

AsyncStorage API

RN框架为开发者提供了 AsyncStorage API,开发者可以利用它将任意“字符串键值对”保存到存储空间中。

它是简单的,异步的。用它可以取代Android的sharedperference和ios的NSUserDefault。

AsyncStorage存储的数据对该RN应用全局都是可以访问的,只需要知道通过它增删改查数据就可以了。

写入数据

开发者可以通过静态函数setItem来存储数据。setItem的JavaScript原型是:

  1. static object setItem(key, value,aCallBack)
代码如下:

  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. doSomething(error){
  2. if(error!=
  3. null){
  4. //如发生错误 处理
  5. console.log(
  6. 'error message:'+error.message);
  7. return;
  8. }
  9. // 执行保存成功的操作
  10. console.log(
  11. "name保存成功!");
  12. }
  13. 作者:于连林520wcf
  14. 链接:https://www.jianshu.com/p/55263b414090
  15. 來源:简书
  16. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. // 构造
  2. constructor(props) {
  3. super(props);
  4. this.doSomething=
  5. this.doSomething.bind(
  6. this);
  7. }
  8. doSomething(error){
  9. if(error!=
  10. null){
  11. //如发生错误 处理
  12. console.log(
  13. 'error message:'+error.message);
  14. return;
  15. }
  16. // 执行保存成功的操作
  17. console.log(
  18. "name保存成功!");
  19. }
  20. //下面4种写法, 推荐第三种和第四种
  21. componentWillMount() {
  22. //最简单的写法 , 无法检测保存何时结束,是否成功
  23. AsyncStorage.setItem(
  24. 'NO',
  25. '01');
  26. console.log(
  27. "NO保存成功");
  28. // 通过自带的回调方法,一旦发生出错就可以监控到
  29. AsyncStorage.setItem(
  30. 'name',
  31. '张三',
  32. this.doSomething);
  33. //Promise操作 ES2015推荐的写法
  34. AsyncStorage.setItem(
  35. 'age',
  36. "18").then(
  37. ()=>{
  38. //成功的操作
  39. console.log(
  40. "age保存成功!");
  41. },
  42. );
  43. // 使用ES2017推荐的异步的写法
  44. this.saveSex();
  45. }
  46. // 箭头函数不需要在构造函数中bind(this)了
  47. saveSex =
  48. async ()=> {
  49. try {
  50. await AsyncStorage.setItem(
  51. 'sex',
  52. 'female');
  53. console.log(
  54. "sex保存成功!");
  55. }
  56. catch(error) {
  57. console.error(error);
  58. }
  59. };
  60. 作者:于连林520wcf
  61. 链接:https://www.jianshu.com/p/55263b414090
  62. 來源:简书
  63. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. // 构造
  2. constructor(props) {
  3. super(props);
  4. this.doSomething=this.doSomething.bind(this);
  5. }
  6. doSomething(error){
  7. if(error!=null){ //如发生错误 处理
  8. console.log('error message:'+error.message);
  9. return;
  10. }
  11. // 执行保存成功的操作
  12. console.log("name保存成功!");
  13. }
  14. //下面4种写法, 推荐第三种和第四种
  15. componentWillMount() {
  16. //最简单的写法 , 无法检测保存何时结束,是否成功
  17. AsyncStorage.setItem('NO','01');
  18. console.log("NO保存成功");
  19. // 通过自带的回调方法,一旦发生出错就可以监控到
  20. AsyncStorage.setItem('name','张三',this.doSomething);
  21. //Promise操作 ES2015推荐的写法
  22. AsyncStorage.setItem('age',"18").then(
  23. ()=>{ //成功的操作
  24. console.log("age保存成功!");
  25. },
  26. );
  27. // 使用ES2017推荐的异步的写法
  28. this.saveSex();
  29. }
  30. // 箭头函数不需要在构造函数中bind(this)了
  31. saveSex = async ()=> {
  32. try {
  33. await AsyncStorage.setItem('sex','female');
  34. console.log("sex保存成功!");
  35. } catch(error) {
  36. console.error(error);
  37. }
  38. };

还可以通过AsyncStorage的静态函数multiSet一次存储多个数据。

  1. static object multiSet(aArray, aCallback)
  2. //参数类型
  3. multiSet([['k1', 'val1'], ['k2', 'val2']], cb);
Promise机制还可以通过下面的方式捕获异常。

  1. AsyncStorage.multiSet([['name','李四'],["sex","male"]])
  2. .then(
  3. ()=>{
  4. console.log("name,sex保存成功");
  5. }
  6. ).catch((errors)=>{
  7. console.log('error,length:'+errors.length);
  8. if(errors.length>0){ //保存操作有异常
  9. console.log(errors[0].message);
  10. //...
  11. }else{
  12. //异常不是数组,有可能是成功操作的处理函数抛出的异常
  13. //...
  14. }
  15. });

获取数据

可以通过AsyncStorage类的静态函数getItem获取数据,JS原型是:
static object getItem(aKey,aCallback)
代码如下:

  1. componentWillMount() {
  2. //...
  3. //方式一 读取数据
  4. AsyncStorage.getItem("name", this.handleResult);
  5. //方式二
  6. AsyncStorage.getItem('sex')
  7. .then( //使用Promise机制的方法
  8. (result)=> { //使用Promise机制,如果操作成功不会有error参数
  9. if (result == null) {
  10. //没有指定的key
  11. return;
  12. }
  13. console.log("sex:" + result);
  14. }
  15. ).catch((error)=> { //读取操作失败
  16. console.log('error:' + error.message);
  17. });
  18. }
  19. handleResult(error, result) {
  20. if (error != null) {
  21. console.log('error message:' + error.message);
  22. return;
  23. }
  24. if (result == null) {
  25. //没有指定的key
  26. return;
  27. }
  28. console.log("name:" + result);
  29. }
也可以通过getAllKeys函数获取当前存储的所有键,再通过multiGet获取所有值。两个函数的原型分别是:
  1. static object getAllkeys([aCallback])
  2. static object multiGet(aArrays,aCallBack)
代码如下:

  1. AsyncStorage.getAllKeys((err, keys) => {
  2. AsyncStorage.multiGet(keys, (err, stores) => {
  3. stores.map((result, i, store) => {
  4. // get at each store's key/value so you can work with it
  5. let key = store[i][0];
  6. let value = store[i][1];
  7. });
  8. });
  9. });

注意的是,AsyncStorage API存储数据是无序的。

开发者还可以通过AsyncStorage的静态函数flushGetRequests取消前面的所有未执行的完成的multiGet操作。

static object flushGetRequests()  
最好也借助Promise机制。

删除数据

删除数据通过 removeItem或者multiRemove 删除。 当然还可以通过clear函数全部清空。
函数原型:

  1. static removeItem(key, callback?)
  2. static multiRemove(keys, callback?)
  3. static clear(callback?)

JSON对象存储

使用AsyncStorage类保存数据,只能通过key-value形式保存一个字符串类型的数据。很难满足开发者的需求。
但是配合JSON类, 把JSON格式的对象转换为一个字符串。然后通过AsyncStorage类的key-value形式进行保存,就可以满足绝大多数需求了。


  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. // 构造
  2. constructor(props) {
  3. super(props);
  4. this.doSomething=
  5. this.doSomething.bind(
  6. this);
  7. }
  8. doSomething(error){
  9. if(error!=
  10. null){
  11. //如发生错误 处理
  12. console.log(
  13. 'error message:'+error.message);
  14. return;
  15. }
  16. // 执行保存成功的操作
  17. console.log(
  18. "name保存成功!");
  19. }
  20. //下面4种写法, 推荐第三种和第四种
  21. componentWillMount() {
  22. //最简单的写法 , 无法检测保存何时结束,是否成功
  23. AsyncStorage.setItem(
  24. 'NO',
  25. '01');
  26. console.log(
  27. "NO保存成功");
  28. // 通过自带的回调方法,一旦发生出错就可以监控到
  29. AsyncStorage.setItem(
  30. 'name',
  31. '张三',
  32. this.doSomething);
  33. //Promise操作 ES2015推荐的写法
  34. AsyncStorage.setItem(
  35. 'age',
  36. "18").then(
  37. ()=>{
  38. //成功的操作
  39. console.log(
  40. "age保存成功!");
  41. },
  42. );
  43. // 使用ES2017推荐的异步的写法
  44. this.saveSex();
  45. }
  46. // 箭头函数不需要在构造函数中bind(this)了
  47. saveSex =
  48. async ()=> {
  49. try {
  50. await AsyncStorage.setItem(
  51. 'sex',
  52. 'female');
  53. console.log(
  54. "sex保存成功!");
  55. }
  56. catch(error) {
  57. console.error(error);
  58. }
  59. };
  60. 作者:于连林520wcf
  61. 链接:https://www.jianshu.com/p/55263b414090
  62. 來源:简书
  63. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  1. doSomething(error){
  2. if(error!=
  3. null){
  4. //如发生错误 处理
  5. console.log(
  6. 'error message:'+error.message);
  7. return;
  8. }
  9. // 执行保存成功的操作
  10. console.log(
  11. "name保存成功!");
  12. }
  13. 作者:于连林520wcf
  14. 链接:https://www.jianshu.com/p/55263b414090
  15. 來源:简书
  16. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    
    
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); }
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  
  
// 构造 constructor(props) { super(props); this.doSomething= this.doSomething.bind( this); } doSomething(error){ if(error!= null){ //如发生错误 处理 console.log( 'error message:'+error.message); return; } // 执行保存成功的操作 console.log( "name保存成功!"); } //下面4种写法, 推荐第三种和第四种 componentWillMount() { //最简单的写法 , 无法检测保存何时结束,是否成功 AsyncStorage.setItem( 'NO', '01'); console.log( "NO保存成功"); // 通过自带的回调方法,一旦发生出错就可以监控到 AsyncStorage.setItem( 'name', '张三', this.doSomething); //Promise操作 ES2015推荐的写法 AsyncStorage.setItem( 'age', "18").then( ()=>{ //成功的操作 console.log( "age保存成功!"); }, ); // 使用ES2017推荐的异步的写法 this.saveSex(); } // 箭头函数不需要在构造函数中bind(this)了 saveSex = async ()=> { try { await AsyncStorage.setItem( 'sex', 'female'); console.log( "sex保存成功!"); } catch(error) { console.error(error); } };
作者:于连林520wcf 链接:https://www.jianshu.com/p/55263b414090 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/68133
推荐阅读
相关标签
  

闽ICP备14008679号