Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在组件willmount-won'中调度redux操作;t在第一次渲染时立即反射_Javascript_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 在组件willmount-won'中调度redux操作;t在第一次渲染时立即反射

Javascript 在组件willmount-won'中调度redux操作;t在第一次渲染时立即反射,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,componentWillMount不再推荐使用,因此我不熟悉这种行为。然而,在我的项目中仍然有一些遗留代码采用了componentWillMount。当我进一步深入研究它时,我发现这种奇怪的行为,redux存储更改不会立即反映在第一次渲染中 我在下一节中简化了代码(可以找到codeSandBox runnable上的完整代码) 在本例中,我尝试在组件willmount中设置本地状态和redux存储。 根据React生命周期顺序,我应该能够在第一个render()中查看这两个值 componen

componentWillMount
不再推荐使用,因此我不熟悉这种行为。然而,在我的项目中仍然有一些遗留代码采用了
componentWillMount
。当我进一步深入研究它时,我发现这种奇怪的行为,redux存储更改不会立即反映在第一次渲染中

我在下一节中简化了代码(可以找到codeSandBox runnable上的完整代码)

在本例中,我尝试在
组件willmount
中设置本地状态和redux存储。 根据React生命周期顺序,我应该能够在第一个
render()
中查看这两个值

componentWillMount(){
this.setState(prevState=>({counter:prevState.counter+1}));
this.props.onIncrement();
控制台。警告(“组件将安装+1”);
}
render(){
控制台。警告(“呈现”);
console.warn(“设置状态计数器”,this.state.counter);
console.warn(“调度计数器”,this.props.value);
}
尽管如此,我还是得到了以下日志:

componentWillMount +1 
render 
setState counter 1
dispatch counter 0
render 
setState counter 1
dispatch counter 1
它渲染两次,并且在第一轮渲染中不会更新redux存储值。 另一方面,
componentDidMount
正在按预期工作:(更改后更新两个值)


有人能解释一下这种机制吗?

这种方法现在已被弃用。它在安装组件之前被调用。方法本身将在
render()
之前调用<代码>此.setState-不会触发额外的重新渲染


使用componentDidMount代替商店订阅和任何副作用。

谢谢您的回答,我实际上在我的项目中更改为
componentDidMount
。但是,在上面的示例中,
onIncrement()
没有看到副作用。您如何解释在
组件willmount
~中禁止这样做?
render 
setState counter 0
dispatch counter 0
componentDidMount -1 
render 
setState counter -1
dispatch counter -1