我有一张世界地图,无论何时点击特定国家/地区,它都会ping和API并在该国家/地区开设学校。 React然后使用传单显示所有点(GEOJSON)。学校装满学校后,我会弹出Dock类型的东西。问题是我需要知道何时更新完成了反应。我尝试使用Map.jsx文件中的react生命周期方法我有以下代码来尝试查看GEOJSON何时完成呈现:
componentWillUpdate() {
console.log('CWU');
}
componentDidUpdate() {
console.log('CDU');
}
但是在控制台中我得到以下打印输出:
CWU, CDU, CWU, CDU, CWU, CDU
因此两个函数都运行3次,对于另一个国家,这两个函数运行两次。所以我不能把在DockWillUpdate或componentDidUpdate中引用Dock的函数放在一起,因为我需要在第三个CDU'之后运行该函数。或者在第二个CDU'之后的另一个国家。有没有办法知道何时反应完成渲染?
答案 0 :(得分:1)
我找到了解决问题的方法。我会尽力解释一下: 我有一个名为
的状态变量didUpdate = false
API会更改道具中的特定条目 所以在componentWillUpdate中,我检查下一个状态是否与我当前的状态不同,如果是,我将didUpdate设置为false。这使得它不会显示。
然后在我的componentDidUpdate中,我检查以前的状态是否与我当前的状态不同,如果是,那么我将didUpdate设置为true。这样就可以显示底座了。
以下是一些代码:
componentWillUpdate(nextProps, nextState) {
if (nextProps.X !== this.props.X) {
this.setState({
didUpdate: false,
})
}
}
componentDidUpdate(prevProps, prevState) {
if (prevProps.X !==this.props.X) {
this.setState({
didUpdate: true
})
}
}
答案 1 :(得分:-1)
您可以使用
componentWillUnmount()
在卸载和销毁组件之前立即调用componentWillUnmount()。在此方法中执行任何必要的清理,例如使计时器无效,取消网络请求或清除在componentDidMount()中创建的任何订阅。