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

React native 在React Native(类组件)中,每个应用程序安装仅运行一次函数,react-native,react-native-android,react-navigation,react-native-ios,react-native-flatlist,React Native,React Native Android,React Navigation,React Native Ios,React Native Flatlist,因此,我这里有一个问题,我只想在应用程序中只运行一次函数 我只需要对异步存储初始化一次空阵列。稍后我将使用ComponentWillMount()在数组中执行读写函数 问题是我如何在一开始初始化一个空数组,并且我不希望它在以后为空(比如当应用程序关闭和打开时) 每次屏幕呈现时,我都会读取存储在异步存储器中的数据。。。但是当第一次安装应用程序时,屏幕呈现。。。我没有调用下面的函数 setObjectValue = async () => { try { const jsonVal

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

我只需要对异步存储初始化一次空阵列。稍后我将使用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.')
}
但万一我在阅读前就说了。。。它会擦除现有数据并将其设置为空数组(因为我有一个构造函数,其中包含数据:[]),因此当我读取数据时,会得到一个空数组

你可以在这里看到完整的代码-


感谢所有帮助您的人:)

您的应用程序中几乎不需要进行更改

首先用componentDidMount替换不安全的组件WillMount

并更改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());

你已经在读取数组并使用getMyObject设置它这里有什么问题吗?是的,但是当应用程序第一次运行时它没有(因为我还没有上传任何值),当应用程序第一次呈现屏幕时。。。它将尝试读取未在异步存储中初始化的对象(未调用setObjectValue)是,但如果电子邮件在异步存储中不可用,则可以设置空数组,对吗?是,但每次屏幕呈现时,数组的值将变为空如果您运行此。。。您可以注意到,当使用不安全的组件willmount()时,新的电子邮件按钮不会给出任何响应。。。但是当我删除这组代码时。。。它起作用了