我遵循了有关AsyncStorage的文档示例:
React Native - AsyncStorage docs
。所以,我实现了我的代码:
var STORAGE_KEY = '@AsyncStorageExample:key';
我用这个函数定义了我的类:
我有一个初始状态:
state={
defineValor: 0,
};
和componentDidMount
函数以及_loadInitialState
:
componentDidMount() {
this._loadInitialState().done();
};
_loadInitialState = async () => {
try {
var value = await AsyncStorage.getItem(STORAGE_KEY);
if (value !== null){
this.setState({defineValor: value});
alert('Recovered selection from disk: ' + value);
} else {
alert('Initialized with no selection on disk.');
}
} catch (error) {
alert('AsyncStorage error: ' + error.message);
}
};
所以我做了一个函数来改变AsyncStorage以及文档中的状态:
changeState = () => {
this.setState ({
defineValor: 1
});
try {
AsyncStorage.setItem(STORAGE_KEY, this.state.defineValor);
alert('Saved selection to disk: ' + this.state.defineValor);
} catch (error) {
alert('AsyncStorage error: ' + error.message);
}
};
因此,当我打开应用程序时,所有进程都会运行,警告“已初始化但磁盘上没有选择”,当我调用我的函数changeState
时,他会发出警告“将选择保存到磁盘:1”。但当我关闭de app并重新打开时,状态未被保存,并且他警告“已初始化,磁盘上没有选择。”。我做错了什么?
答案 0 :(得分:2)
setState
有一个回调在该回调中执行AsyncStorage.setItem
。
此外,AsyncStorage仅接受字符串作为值
this.setState({ defineValor: string }, () => {
try {
AsyncStorage.setItem(STORAGE_KEY, this.state.defineValor);
alert('Saved selection to disk: ' + this.state.defineValor);
} catch (error) {
alert('AsyncStorage error: ' + error.message);
}
});