我正在zustand為全局狀態實施,但在設置自己的全局狀態時遇到了同樣的問題。只要我將一個組件附加到一個簡單的 useStore 掛鉤上,我的組件就會在每次更新時呈現兩次。盡管發生了這種情況:我不更新任何狀態沒有道具被改變我將組件包裝在 React.memo() 中只是為了確定商店(使用 zustand 創建)中的任何內容都沒有改變 - 除了應該觸發一次更新的一項更改。這是一個 Codesandbox - 一個您可以檢查日志的最小示例 - 在重新加載和每次更新后,它總是記錄兩次。對于那些寧愿在沒有運行的情況下查看代碼的人:import React from "react";import create from "zustand";const useStore = create((set) => ({ bears: 0, increasePopulation: () => set((state) => ({ bears: state.bears + 1 })), removeAllBears: () => set({ bears: 0 })}));const sessionId = Math.random().toString().slice(2, 7);const App = React.memo(() => { const { bears, increasePopulation } = useStore((state) => state); console.log("RENDER Bears", bears, sessionId); // always logs twice return ( <div className="App"> <h1>Hello CodeSandbox</h1> <h2>Start editing to see some magic happen.!</h2> <button onClick={increasePopulation}>increase</button> </div> );});export default App;現在,我明白有一個額外的渲染并不是真正的問題,只是當我的應用程序增長時,我傾向于將這些組件中的幾個嵌套在一起,所以當我確實想最小化渲染量時,很難知道從哪里開始。所以,我的問題是:為什么會這樣?我可以防止這種雙重渲染嗎?如果可以,怎么做?如果不是,處理這個問題的正確方法是什么?
使用 React Hooks 防止重新渲染
三國紛爭
2023-04-27 10:21:45