首页 > 解决方案 > 如何在清理功能上删除监听器

问题描述

在未定义 id 的情况下,如何删除侦听器?清理正在调用 getMessages.off() 但这没有定义。

useEffect(() => {
    if (id) {
        const getMessages = database
            .on("child_added", function(snapshot) {
                console.log(snapshot)
            });
    }

    return () => {
        getMessages.off();
    };
}, [id]);

标签: javascriptreactjs

解决方案


getMessages在 if 语句之前定义。这将可closure function用于清理。

useEffect(() => {
  let getMessages;
  if (id) {
    getMessages = database.on("child_added", function (snapshot) {
      console.log(snapshot);
    });
  }

  return () => {
    getMessages && getMessages.off();
  };
}, [id]);

推荐阅读