每次启动应用程序时,我都要从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>
);
}
}
答案 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
中)被调用。
这意味着;
componentWillMount()
,并通过componentDidMount()
将componentWillMount()
(取自初始状态)的值保存到键0
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