setState()
является асинхронным.Это означает, что React будет выбирать, когда подходящее время для обновления состояния, что, вероятно, не так, когда вы делаете console.log()
.
Использование console.log()
в обратном вызове setState
, поэтому, когда состояние изменяется, ваша функция выполняется:
fetch(URL)
.then(res => res.json())
.then(res => {
this.setState({
recipesList: res
},()=>{//setState callback.
console.log(this.state.recipesList);
});
});
Используйте функцию выборки в componentWillMount ()
Это связано с жизненным циклом ReactJS.Если вы выполните функцию внутри componentWillMount
, она не вызовет второго рендеринга :
class yourComponent extends React.Component{
state = {
recipesList: []
}
componentWillMount(){
fetch(URL)
.then(res => res.json())
.then(res => {
this.setState({
recipesList: res
},()=>{//setState callback.
console.log(this.state.recipesList);
});
});
}
}
РЕДАКТИРОВАНИЕ:
Если вы использовали fetch
внутри componentWillMount()
, вы можете:
Рендеринг с карты напрямую для рендеринга.
В вашем методе рендеринга используйте функцию карты следующим образом:
render(){
return (
<div className="App">
<div className="contentWrapper">
{
this.state.recipesList.map(item => {
return (
<div className="recispesList">
<h1>{item.title}</h1>
</div>
);
})
}
</div>
</div>
);
}