Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 componentDidUpdate在每次渲染后不触发_Javascript_Reactjs - Fatal编程技术网

Javascript componentDidUpdate在每次渲染后不触发

Javascript componentDidUpdate在每次渲染后不触发,javascript,reactjs,Javascript,Reactjs,我正在跟踪componentdiddupdate和render何时使用日志语句触发 componentdiddupdate中的日志语句在render之后不会触发。我已使用断点确认这不是时间问题。 我使用“渲染道具”来包装有问题的组件。我的代码(精简)如下。这是日志记录的输出。有时我会让componentdiddupdate触发,但不一致,而且这从来不是最后一件事,RENDER总是最后出现在我的日志中,从不UPDATE 据我所知,componentdiddupdate应该触发,即使更新没有修改DO

我正在跟踪
componentdiddupdate
render
何时使用日志语句触发


componentdiddupdate中的日志语句在
render
之后不会触发。我已使用断点确认这不是时间问题。


我使用“渲染道具”来包装有问题的组件。我的代码(精简)如下。这是日志记录的输出。有时我会让
componentdiddupdate
触发,但不一致,而且这从来不是最后一件事,
RENDER
总是最后出现在我的日志中,从不
UPDATE


据我所知,
componentdiddupdate
应该触发,即使更新没有修改DOM(尽管这里的呈现确实更新了DOM)React@16.11.x和
React@16.12.x
具有相同的结果

类MyWrapper扩展了React.PureComponent{
render(){
const{buttonDefinitions}=this.props;
返回(
{
返回(
);
}}
/>
);
}
}
class MyMenu扩展了React.Component{
componentDidUpdate(){
log.warn('UPDATE');
}
render(){
log.warn('RENDER');
const{buttonDefinitions}=this.props;
返回(
{buttonDefinitions.map(buttonDef=>(
))}
);
}
}

根据,如果您使用带有React pure组件的渲染道具,则对于新道具,浅层道具比较将始终返回false。在这种情况下,对于每个渲染,它将为渲染属性生成一个新值。随着新道具的创建&不更新之前的道具,它将不会调用componentdiddupdate

根据,如果使用带有React pure组件的渲染道具,则对于新道具,浅层道具比较将始终返回false。在这种情况下,对于每个渲染,它将为渲染属性生成一个新值。随着新道具的创建&不更新之前的道具,它将不会调用componentdiddupdate

shouldComponentUpdate()
返回false时,将不会调用
componentdiddupdate()
。谢谢@Kars,但是
shouldComponentUpdate
未被使用,并且调用了
render
。虽然我们没有使用它,但是如果
shoulldcomponentupdate
返回false,将不会调用
render
。您是否可以将
componentDidMount
添加到
MyMenu
中,并确保它没有被卸载和再次装载?如果是这种情况,
InfoProvider
可能会导致这种情况,但我不能在没有看到更多代码的情况下说出来。
componentDidUpdate()
将不会在
shouldComponentUpdate()
返回false时调用
shouldComponentUpdate()
。谢谢@Kars,但是
shouldComponentUpdate
未被使用,并且调用了
render
。虽然我们没有使用它,但是如果
shoulldcomponentupdate
返回false,将不会调用
render
。您是否可以将
componentDidMount
添加到
MyMenu
中,并确保它没有被卸载和再次装载?如果是这种情况,
InfoProvider
可能是造成这种情况的原因,但如果没有看到更多的代码,我就无法判断。