我用react做了一个小应用程序,它在我的电脑上运行顺利。然而,当我在不同的移动设备上打开它时,它在使用一分钟左右后就会崩溃。我不知道是什么原因导致了这个问题,但奇怪的是,我的控制台上没有任何错误或警告,也没有使用componentDidUpdate或可能导致useEffect等无限循环的挂钩。如果你知道是什么原因导致react应用程序在移动设备上出现故障,或者遇到了同样的问题并找到了解决方案,请帮助我。这是应用
https://summerresort.netlify.app
和代码
https://github.com/Mahmoud-farargy/summerresort/tree/master/Beach-Resort
谢谢!
除了2分外,您的应用程序看起来一切正常。我无法检验我的猜测,但我几乎完全可以肯定你的问题来自这两个。
看起来有问题的两个部分都位于index.js
中,这里有:
window.addEventListener("scroll", () => {// gets the current height
let scroll = document.body.scrollTop || document.documentElement.scrollTop;
let arrowUp = document.querySelector(".arrow-up-btn").style;
scroll >= 1000 ? arrowUp.display="flex" : arrowUp.display = "none";
});
window.addEventListener("resize", ()=> {// gets the current width
this.setState({
currentPageWidth: window.innerWidth || document.documentElement.clientWidth
})
});
第一个代码块是昂贵的,因为:
- 滚动事件被频繁地触发
- 你不会被动地听滚动(不过这是个好主意(
- 您设置
style
的频率比需要的频率高得多
然而,我认为,这是导致手机出现故障的第二个代码块。
看看这个答案,看看为什么调整大小事件在手机上比在桌面上更频繁。
- 现在,每次触发调整大小事件时,
MainApp
的状态已更新 - 每次更新
MainApp
时,React都会重新计算其所有子级 - 默认情况下,React只重新运行每个子级的渲染;比较输出
考虑到你有所有的路线&CCD_ 5&您没有实现任何优化(React.PureComponent
、路由的延迟加载等(React将不得不重新计算每个resize
事件上整个站点的样子。
最简单的修复方法是将currentPageWidth
存储在ref而不是state中。
另一个可能的问题是,通过在render方法中附加侦听器,您将在每个渲染上附加新的侦听器,而不清除任何以前添加的侦听器。