ComponentDidUpdate (), вызывающий утечки памяти и разрядку батареи в IOS - PullRequest
0 голосов
/ 06 февраля 2019

Я использую метод componentDidUpdate () для отображения обновленных данных на экране всякий раз, когда выполняются какие-либо функции, такие как сканирование кода Qr и сохранение данных.Но после поиска в сети я обнаружил, что вызов this.setState в componentDidUpdate () создает бесконечный цикл.Я попытался устранить эту проблему путем включения prevState в вышеупомянутый метод, но мне не удалось.Ниже мой код для более подробной информации.Как я могу обновить состояние, поступающее из Asyncstorage, без помощи componentDidUpdate ()?

componentDidUpdate() {
    try {
      AsyncStorage.getItem('Data').then((value) => {
        this.setState({
          list: JSON.parse(value)
        })
      })
    } catch (err) {
    }
  }

Любая помощь или предложения будут полезны Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

Обновление состояния в componentDidUpdate вызовет еще один componentDidUpdate вызов, поэтому вы должны ограничить вызов setState().Например:

componentDidUpdate(prevProps, prevState) {

  // Only update state if list is empty 
  if (prevState.list.length === 0) {

    try {
      AsyncStorage.getItem('Data').then((value) => {
        this.setState({
          list: JSON.parse(value)
        })
      })
    } catch (err) {
    }
  }
}
...