运行 React Native 中每个应用程序安装仅一次的函数(Class 组件)

Run An Function Only Once Per App Installation In React Native ( Class Component )

所以我这里有一个问题我只想运行一个函数在应用程序中只有一次

我只需要将空数组初始化一次到异步存储。我将在稍后使用 ComponentWillMount() 在数组中执行读写函数 ...

问题是我如何首先初始化一个空数组并且我不希望它稍后为空(比如当应用程序关闭和打开时)

每次屏幕渲染我读取存储在异步存储中的数据......但是当屏幕第一次渲染应用程序安装......我没有调用下面的函数

setObjectValue = async () => {
  try {
    const jsonValue = JSON.stringify(this.state.data)
    await AsyncStorage.setItem('Emails', jsonValue)
    this.setState({ value : this.state.data.length })
  } catch(e) {
    // save error
  }
  console.log('Done.')
}

但是如果我在读取之前调用它...它会擦除现有数据并将其设置为空数组(因为我有一个包含数据的构造函数:[])所以当我读取数据时我得到空数组

您可以在此处查看完整代码 - https://snack.expo.io/@belgin/budget-tracker

感谢所有提供帮助的人:)

您的应用几乎不需要更改。

先把UNSAFE_componentWillMount换成componentDidMount

并像下面这样更改您的 getMyObject ,这将确保它仅在值存在时更新

 getMyObject = async () => {
    try {
      const jsonValue = await AsyncStorage.getItem('Emails');
      if (jsonValue) {
        const data = JSON.parse(jsonValue);
        this.setState({ data: data, value: data.length });
      }
    } catch (e) {
      // read error
    }
  };

同时从您更新 asyncStorage 的函数中删除 setState 调用,这将显示无效数据,因为您的调用已完成,而状态未更新。

您也可以在状态更新后更新 asyncStorage,如下所示

this.setState({ data: this.state.data },()=>this.setObjectValue());