reactjs - 转到不同的 url 后从 componentDidMount() 停止函数
问题描述
我在这样的有状态组件中调用了一个函数
handleScroll = (event) => {
if (window.scrollY < 201){
var pxScrolled = window.scrollY;
var opValue = (200 - pxScrolled)*0.005;
document.getElementById("blogpost").firstChild.style.opacity = opValue;
}
if (window.scrollY > 201){
document.getElementById("blogpost").firstChild.style.opacity = "0";
}
}
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
}
但是现在当我更改 url 并转到另一个页面时,该功能仍在运行,我得到了
TypeError:无法读取 null 的属性“firstChild”
我如何将功能保留在一个组件中?
如果您需要我将提供的其他信息,不确定这是否足够信息
解决方案
componentWillUnmount
您需要在组件的方法中清理并删除事件侦听器。当组件即将从页面中删除时,这将取消滚动事件侦听器——这似乎会在 URL 更改时发生。
例如:
componentWillUnmount() {
window.removeEventListener("scroll", this.handleScroll);
}
一般来说,方法中添加的所有事件侦听器componentDidMount
都应在方法中删除componentWillUnmount
。
推荐阅读
- c# - UsbDeviceConnection.BulkTransfer 在 Android API > 23 中不起作用
- wso2 - 使用 SAML Web SSO 的 WSO2 身份服务器中每个租户的 IdP 和 SP
- python-2.7 - python 2.7 windows7,stringIO,getvalue(),错误 6
- html - 如何在容器末尾裁剪文本(带省略号)
- solr - Solr 在日期范围查询上表现不佳
- swift - DispatchQueue.main.async 中的延迟
- python - 如何从 Python QBO API 包装器 Sidecars 访问地址数据?
- node.js - Mongoose 无法对位置数组执行 $near 查询
- javascript - 为什么以点结尾的javascript Number会返回一个数字,但是在正则表达式函数中它会失败
- vbscript - 使用 for 循环 VBS 中文件名的最后几个字母搜索文件夹的其余部分