React Native вызов this.setState внутри функции

Dog.name - скрывает Animal.name, и это очень плохой шаблон для этого. Любая хорошая IDE предупредит вас о том, что вы это делаете.

Оба поля экземпляра существуют, и вы можете получить доступ к ним из Dog как this.name и super.name.

1
задан AndreX 13 July 2018 в 23:12
поделиться

4 ответа

1
ответ дан agm1984 17 August 2018 в 12:06
поделиться

Этот ответ на некоторые хитроумные

componentDidMount() {
    fetch('http://example.com/rss.xml')
      .then((response) => response.text())
      .then((response) => {
        parseString(response, function (err, result) {
          this.setState({
            articles: JSON.stringify(result.rss.channel[0].item)
          })
          console.log('RAW: '  + result.rss.channel[0].item);
setTimeout(() => {
   console.log('THIS: ' + this.state.articles);
}, 1000);

        }.bind(this));
      });
  }
0
ответ дан J.plus.123 17 August 2018 в 12:06
поделиться

Вместо использования null для начального значения вы можете использовать пустой массив []. Таким образом, ваша переменная состояния articles никогда не находится в согласованном состоянии. Кроме того, вы можете избежать ручного связывания в своем обратном вызове и использовать функции стрелок, а затем сохранить текущую область. Таким образом, вы будете иметь правильное закрытие для использования this.state.

parseString(response, (err, result) => {
  this.setState({
    articles: JSON.stringify(result.rss.channel[0].item)
  })
});
0
ответ дан Kyle Roach 17 August 2018 в 12:06
поделиться
  • 1
    Я использовал статьи как пустой массив, я изменил для целей тестирования, не могли бы вы объяснить, что такое согласованное состояние? ... Также я пробовал со ссылкой на стрелку раньше, но этот способ вообще не работает. – AndreX 14 July 2018 в 00:30
  • 2
    Согласованное состояние для массива означает, что любая точка, которую вы должны вызывать .map для значения. Инициализация значения как null - это несогласованное состояние, которое нельзя называть .map – Kyle Roach 15 July 2018 в 03:57

В методе render () вы можете использовать inline If :

{this.state.articles && (
  // Display articles
)}

Когда articles перестает быть нулевым, элемент сразу после & amp; & amp; & amp; будет отображаться, и пока он равен нулю, ошибки не будут выбрасываться.

0
ответ дан NULL SWEΔT 17 August 2018 в 12:06
поделиться
  • 1
    Он не работает, кажется, что он отображает представления, и после того, как он вызывает this.setState, на самом деле это странно. – AndreX 14 July 2018 в 00:50
  • 2
    Вы должны использовать «inline if» внутри кода JSX, который возвращается методом render (). – NULL SWEΔT 14 July 2018 в 01:00
Другие вопросы по тегам:

Похожие вопросы: