reactjs - ComponentDidUpdate 在移动设备上导致滞后/崩溃,而不是在桌面上
问题描述
我的 ReactJs 项目中有一个显示产品的页面。在该页面的底部有一个类似产品的列表。当有人单击列表中的其中一个产品时,他们会链接到他们已经在同一页面(组件)上,即原始产品页面。这改变了产品。为了更新这一点,我调度了一个函数,该函数使用更新的 id 重新获取产品。下面的例子。
componentDidMount() {
window.scrollTo(0, 0)
this.props.fetch(this.props.match.params.id);
this.updateWindowDimensions();
window.addEventListener('resize', this.updateWindowDimensions);
}
componentDidUpdate(prevProps) {
if(prevProps.data !== this.props.data) {
this.updateItem()
}
}
updateItem = () => {
this.props.fetch(this.props.match.params.id)
}
在我的浏览器中,事情按预期工作。现在,当我在手机上打开应用程序时,页面加载,变得迟钝,然后服务器崩溃。如果我删除 componentDidUpdate 功能,页面加载在我的手机上就可以了。
我无法弄清楚为什么会发生这种情况以及我能做些什么来解决它。我已经尝试使用 shouldComponentUpdate() 进行调整,但无法正常工作。有没有人遇到过类似的问题?
解决方案
好的。让我背诵它。如我错了请纠正我。您有一个产品页面,显示有关特定产品的一些信息。我相信 URL 中的 id 指的是这个产品。下一部分是当您单击同一页面上的类似产品时,以显示有关您刚刚单击的产品的信息。因此,请相应地更改 URL。
例如,对于我从 ID 为 1 的产品页面单击 ID 为 2 的类似产品的场景,URL 应从 /product/1 => /product/2 更改。
接下来是您需要在 componentDidUpdate 中侦听此 ID 更改,如下所示。
componentDidUpdate(prevProps) {
console.log(this.props.match.params.id, prevProps.match.params.id);
//Just to ensure id Change is caught here.
if(this.props.match.params.id !== prevProps.match.params.id) {
// Make the fetch Call for the product.
}
}
比较 ID 本身比比较对象更有效,并且花费的时间要少得多。
推荐阅读
- java - 如何使用 JavaFX 垂直堆叠下载窗格?
- laravel - fwrite(): 发送 6 个字节失败,errno=32 Broken pipe laravel
- azure - 使用本机客户端重置密码的 Azure B2C 密码要求
- python - shell脚本中的一对一映射
- python - 从距离和日期时间数据创建新的速度列
- python - Selenium Python 在获取谷歌评论时无法向下滚动
- r - 基于 ggplot 中的 x 轴变量的箱线图中的颜色值
- c# - 在 C# .NET Framework 中使用 ConfigurationBuilder 我的应用服务设置到哪里去了?
- c - 需要为 __alignof__ 调试符号
- statistics - 组合统计集