Dog.name
- скрывает Animal.name
, и это очень плохой шаблон для этого. Любая хорошая IDE предупредит вас о том, что вы это делаете.
Оба поля экземпляра существуют, и вы можете получить доступ к ним из Dog
как this.name
и super.name
.
Этот ответ на некоторые хитроумные
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));
});
}
Вместо использования null
для начального значения вы можете использовать пустой массив []
. Таким образом, ваша переменная состояния articles
никогда не находится в согласованном состоянии. Кроме того, вы можете избежать ручного связывания в своем обратном вызове и использовать функции стрелок, а затем сохранить текущую область. Таким образом, вы будете иметь правильное закрытие для использования this.state
.
parseString(response, (err, result) => {
this.setState({
articles: JSON.stringify(result.rss.channel[0].item)
})
});
В методе render () вы можете использовать inline If :
{this.state.articles && (
// Display articles
)}
Когда articles
перестает быть нулевым, элемент сразу после & amp; & amp; & amp; будет отображаться, и пока он равен нулю, ошибки не будут выбрасываться.