簡體   English   中英

React setInterval function 在重新渲染后繼續在后台運行

[英]React setInterval function keeps running in the background after rerender

我在 useEffect 中使用 setInterval,在我的一個反應組件中使用一個空的依賴數組。 有真/假 useState 控制該組件的顯示。 當 state 為假時,組件被隱藏,當它為真時,組件被顯示。

像這樣的東西:

const [state, setState] = useState(false)

// in jsx render section

return (
   <div>
      {state? <component/> : '' }
   </div>
)

當組件第一次加載時,setInterval 只運行一次,這是它應該做的。

如果 state 變為 false 然后返回 true,則該組件將從 UI 中刪除,然后再次顯示回來,但是這里發生的是現在我有兩個 setInterval 函數在后台運行,第一個沒有關閉。

每次組件重新渲染時,setInterval 函數的數量都會不斷增加。

我不明白 React 在這種情況下是如何工作的。

我需要知道它是如何工作的以及如何解決它。

這是 React useEffect 的結構。React 在組件卸載時執行清理。

useEffect(() => {
    //effect
    return () => {
        //cleanup runs on unmount
    }
}, [])

清理 function 應該有 clearInterval() 這將基本上刪除 setInterval 或在組件卸載時停止它。 請參閱下面的實用代碼:

let intervalid;
useEffect(
    () => {
     intervalid = setInterval(() => {console.log("Iterate");}, 1000));

      return function cleanup() {
        console.log("cleaning up");
        clearInterval(intervalid);
      };
    },
    []
  );

上面的代碼只是為了理解方法。 每個效果都可能返回一個 function ,在它之后進行清理。 這讓我們可以保持添加和刪除訂閱的邏輯彼此接近。 # FROM REACT DOCS 參考

暫無
暫無

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

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