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

时间:2020-11-08 11:52:10

标签: react-native react-native-android react-navigation react-native-ios react-native-flatlist

所以我这里有一个问题,我只想仅在应用程序中运行一次功能

我只需要向异步存储初始化一次空数组。我稍后将使用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

感谢任何帮助的人:)

1 个答案:

答案 0 :(得分:1)

您的应用程序需要进行的更改很少。

首先用componentDidMount替换UNSAFE_componentWillMount

并按如下所示更改您的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());