【问题标题】:AsyncStorage don't save the change state - React NativeAsyncStorage 不保存更改状态 - React Native
【发布时间】:2017-08-17 18:30:56
【问题描述】:

我遵循了关于 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”。但是当我关闭应用程序并重新打开时,状态没有保存,并且他警告“已初始化,磁盘上没有选择。”。我做错了什么?

【问题讨论】:

  • 可能 AsyncStorage 在 defineValor 状态更新之前设置了值。 setState 有一个回调函数,在该回调中执行 AsyncStorage setItem。

标签: javascript android reactjs react-native asyncstorage


【解决方案1】:

setState 有一个回调,在该回调中执行 AsyncStorage.setItem。 AsyncStorage 也只接受 string 作为值

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);
  }
});

【讨论】:

  • 您好,感谢您的帮助。但我真的试过了,还没有工作。你有别的想法吗?
  • AsyncStorage 接受值作为 string ,您正在尝试正确设置数字。尝试设置一个字符串值
  • 乐于助人:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多