我正在制作一个非常简单的 React 组件,它显示从远程源获得的数据。在获取数据之前,它必须等待用户正确登录。这是我尝试这样做的方法:
class MyComponent extends React.Component {
componentDidUpdate () {
if (this.props.loggedIn) {
api.getData()
.then(() => {
this.props.dispatch({
type: 'gotData'
})
}, (reason) => {
this.props.dispatch({
type: 'getDataFailed'
})
})
}
}
}
用我自己的话来说,每次与该组件(在本例中为loggedIn
prop)相关的状态的一部分被更新时,componentDidUpdate
都会被调用,如果我看到用户已登录,我就可以获取数据。
这实际上工作得很好,除了一个主要问题:似乎调用dispatch
最终会再次触发componentDidUpdate
,所以我最终陷入了无限循环。我什至不必在任何地方监听这些调度事件,使用该dispatch
函数的简单事实足以componentDidUpdate
再次触发。
我的猜测是 dispatch 执行了我内部使用的根 reducer setState
,从而再次触发了整个update
生命周期链。
这种事情通常是怎么做的?如何dispatch
从内部调用componentDidUpdate
而不会陷入无限循环?