javascript - Reactjs,在 componentWillUnmount 上移除事件监听器,
问题描述
我有一个小的反应应用程序。在我的主要组件之一中,我在 componentDidMount 上添加了一个事件侦听器,但是当我尝试在 componentWillUnmount 上删除它时,它似乎并没有这样做。我什至尝试将它们一个接一个地放置,但似乎仍然没有被删除。
这是我的情况的示例代码(从真实的减少)
listenerF(e){
console.log('im scrolling!'
//..actually does other stuff
}
componentDidMount(){
window.addEventListener('scroll', e => this.listenerF(e))
}
componentWillUnmount(){
window.removeEventListener('scroll',e=>this.listenerF(e))
console.log('unmounted')
}
我怀疑它可能是充当匿名函数的箭头函数,因此 removeEventListener 没有正确匹配函数。
我尝试了一些替代方法来添加事件侦听器,仅使用函数调用或不使用箭头函数,但它似乎没有那样工作,所以我不确定我的语法或设置可能有什么问题,事件被正确添加,但无法删除
解决方案
React 会自动将事件注入您的处理程序,无需将其包装在箭头函数中只是为了传递事件,问题是 React 没有引用您传递给处理程序的函数。
listenerF(e) { // dont forget to add the event as a parameter here
console.log(e);
console.log("im scrolling!");
}
componentDidMount() {
window.addEventListener("scroll", this.listenerF);
}
componentWillUnmount() {
window.removeEventListener("scroll", this.listenerF);
console.log("unmounted");
}
推荐阅读
- azure - Azure ADB2C - SPA 和守护程序应用程序的 Web API 身份验证
- android - Android Studio Arctic Fox 无法在 Apple M1 上调试
- html - HTML 电子邮件中的链接无法在浏览器外部点击
- c# - 让 Microsoft.Identity(前 AzureAD)与 Swagger 一起工作
- c# - 要更改列的 IDENTITY 属性,需要删除并重新创建列。(Entity Framework Core 5.0.2)
- java - 如何在kotlin中对arrayListOf项目求和
- google-apps-script - 使用 Google 应用脚本将联系人添加到 SendGrid
- css - 反应原生样式的组件 tintColor 无法正常工作
- java - 如果两个或多个注释满足同一字段上的条件,Javax 验证不稳定
- css - 为什么我的 css 旋转动画不起作用?