dom完成渲染后的反应函数

时间:2018-01-18 18:30:02

标签: javascript reactjs react-redux

我有一张世界地图,无论何时点击特定国家/地区,它都会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'之后的另一个国家。有没有办法知道何时反应完成渲染?

2 个答案:

答案 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()中创建的任何订阅。