reactjs - componentDidUpdate 导致无限循环
问题描述
我有一个组件(显示列表)在更新道具(redux)之前呈现(有新项目添加到列表中并且应该显示但它不是,除非重新加载应用程序)。我写这个是为了防止这种行为:
shouldComponentUpdate(nextProps, nextState) {
if (this.props.data === nextProps.data) {
return false;
} else {
return true;
}
}
componentWillUpdate(prevProps){
if(prevProps.data !== this.props.data){
this.props.onFetchAction()
}
}
它在渲染之前使组件更新,但是在控制台上 onFetchAction() 会不停地触发。我怎样才能防止这种情况?????任何帮助将不胜感激。
解决方案
可能通过调用this.props.onFetchAction()
You're updates props.data
。您在存储什么类型的数据this.props.data
?如果它是一个对象,那么您是通过引用而不是数据进行比较。这就是为什么prevProps.data !== this.props.data
将永远存在false
,并且您将有一个不定式循环。
您可以使用库的isEqual
( https://lodash.com/docs/4.17.14#isEqual ) 方法lodash
。此方法将通过其中的数据而不是引用来检查两个对象。所以代码看起来像:if (!isEqual(prevProps.data, this.props.data) { ... }
.
推荐阅读
- unix - 将文件夹名称附加到文件的第一列
- c# - 在 C# winforms 中解决冗长的 onPaint 事件的正确方法?
- html - 左右边缘的插图框阴影褪色/透明
- visual-studio - 为什么使用命令 Update-Package --reinstall 后安装了新软件包
- mysql - 如何复制一个值改变的数据(Mysql)
- webgl - 编辑纹理颜色 - WebGL
- javascript - 通过 OnClick 事件为图像添加动画
- math - 3D 空间中声音的多点定位
- php - PHP:将对象解析为 XML(带有属性)
- google-chrome - java.lang.NoSuchMethodError:com.google.gson.GsonBuilder.setLenient()Lcom/google/gson/GsonBuilder;通过 ChromeDriver 启动 Chrome 时