javascript - 如何在清理功能上删除监听器
问题描述
在未定义 id 的情况下,如何删除侦听器?清理正在调用 getMessages.off() 但这没有定义。
useEffect(() => {
if (id) {
const getMessages = database
.on("child_added", function(snapshot) {
console.log(snapshot)
});
}
return () => {
getMessages.off();
};
}, [id]);
解决方案
getMessages
在 if 语句之前定义。这将可closure function
用于清理。
useEffect(() => {
let getMessages;
if (id) {
getMessages = database.on("child_added", function (snapshot) {
console.log(snapshot);
});
}
return () => {
getMessages && getMessages.off();
};
}, [id]);
推荐阅读
- google-cloud-platform - 哪种方法最适合从现有 VM 创建 Google Cloud VM?
- javascript - TypeError: undefined is not an object (评估 '_this.props.auth(values.username, values.password).then')
- superset - Superset 如何在仪表板中添加过滤器
- javascript - JSON 数组值,附加到 URL 并刷新
- javascript - 使用 Cypress 选择文本
- c - 累计溢出
- typescript - 为什么正确结构的 Typescript 数组不能分配给看似兼容的元组
- python-3.x - Dlib(支持 GPU)不能正常工作,不确定?
- javascript - 无法拒绝符号
“@xml/文件路径” 在android studio中扫描捕获图像并检索ocr数据? - ios - 在 Swift3 iOS 中使用字符串参数对对象数组进行排序