我会先声明我是 React.js 的初学者
我创建了一个我正在处理的项目示例,我在其中调用 componentDidMount() 中的 API 并获取一组对象,将其设置为状态。这是它的样子:
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
thing: []
}
}
componentDidMount() {
// Fake API
const apiCall = () => ({
data: "test"
})
// Fake call
const data = apiCall()
this.setState({
thing: [
...this.state.thing,
data
]
})
}
render() {
return (
<div>
<h1>{ this.state.thing[0].data }</h1>
</div>
)
}
}
我知道 setState 在根据文档使用时不能保证更新。我还找到了“forceUpdate()”,文档建议尽可能少地使用它。尽管如此,我尝试使用它,但无济于事。
我能够在 componentDidMount() 运行期间和渲染的 h1 元素中 console.log 新状态,但我无法在渲染中实际显示它,因为它首先渲染一个空状态数组。
我的问题是:有没有办法在我的程序运行渲染之前强制更新我的状态,以便我可以看到它,如果没有,我如何才能看到我的新状态反映在 JSX 中?
原文由 Jacob Lockett 发布,翻译遵循 CC BY-SA 4.0 许可协议
componentDidMount
在初始渲染后调用,因此,在初始渲染时this.state.thing[0]
未定义,因此会导致错误,您需要在使用前执行条件检查this.state.thing[0].status