如何在react-native中每次启动应用时增加asyncStorage的值?

时间:2019-01-22 07:12:52

标签: react-native increment launch asyncstorage

每次启动应用程序时,我都要从AsyncStorage中增加myKey变量。 但就我而言,价值永远不变。每次启动应用程序我都会得到1。

任何人都知道如何增加asyncStorage的变量。

这是我的代码

 import React, { Component } from 'react';
 import { AsyncStorage, View, Text } from 'react-native';

 export default class App extends Component {
   constructor() {
     super();
     this.state = {
       myKey: 0
      }
    }

  componentWillMount() {
    this.saveData();
 }

 saveData() {
   AsyncStorage.setItem('myKey', this.state.myKey + 1);
   this.setState({'myKey': JSON.parse(this.state.myKey + 1)});
 }

 componentDidMount() {
   AsyncStorage.getItem('myKey').then((value) => {
    this.setState({'myKey': value});
  });
  console.log(this.state.myKey);
}

render() {
   return (
      <View>
        <Text>Hello World</Text>
     </View>
    );
  }
}

enter image description here

3 个答案:

答案 0 :(得分:1)

ComponentWillMount在ComponentDidMount之前触发,因此您始终将密钥设置为1(因为state.key = 0),然后才能获取密钥进行存储并用1更新状态。此外,您只能在AsyncStorage中保存字符串值,因此您必须先进行从string到int的转换以进行计算,然后再进行从int到string的转换以保存值。 我会像下面这样:

await componentDidMount() {
    let key = parseInt(await AsyncStorage.getItem('myKey'));
    AsyncStorage.setItem('myKey', (key + 1).toString());
});

答案 1 :(得分:0)

您的逻辑似乎混乱了。当前,您的持久逻辑在增量逻辑(在 static void Main(string[] args) { SendEmailBySmtp(); SendEmailAsyncBySmtp().GetAwaiter().GetResult(); } 中)(在SendMailAsync中)被调用。

这意味着;

  1. 您的组件触发componentWillMount(),并通过componentDidMount()componentWillMount()(取自初始状态)的值保存到键0
  2. 接下来,是下一个生命周期挂钩; myKey被解雇了。在这里,您可以通过AsyncStorage.setItem()(设置为componentDidMount())来加载myKey的值,并将其递增到AsyncStorage.getItem()

要解决此问题,请考虑修改组件,以便在0生命周期挂钩中包含用于加载,递增和持久保存1值的逻辑,如以下代码和注释中所述:

myKey

答案 2 :(得分:0)

您是否尝试过以下方法?

componentDidMount() {
   AsyncStorage.getItem('myKey').then((err, value) => {
    if (isNaN(err)) {
      if(isNaN(value)) {
        value = 0;
      } else {
        value = parseInt(value);
      }
      AsyncStorage.setItem('myKey', value + 1);
    }
  });
}

Error是第一个参数,而不是value,请检查here