簡體   English   中英

React.useEffect 不清理

[英]React.useEffect does not cleanup

我有一個用於檢測外部點擊的自定義反應鈎子。

function useOutsideClick(ref, onOutsideClick) {
  useEffect(() => {
    const onClick = event => {
      if (!ref.current?.contains?.(event.target)) {
        onOutsideClick(event);
      }
    }
    console.log('mounted');
    document.addEventListener('click', onClick);
    return () => {
      document.removeEventListener('click', onClick);
      console.log('unmounted');
    }
  }, [onOutsideClick])
}

這是我在控制台中看到的。

mounted

mounted
unmounted

mounted
unmounted

...

結果,我有兩個事件偵聽器而不是一個,因為其中一個沒有清理。 我究竟做錯了什么?

好吧,那是我的錯。 一切正常。 問題是我在頁面的根目錄中有另一個組件,僅在離開時才會卸載。 所以,output 是

mounted

mounted
unmounted

mounted
unmounted

...

unmounted

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM