亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 React Hooks 防止重新渲染

使用 React Hooks 防止重新渲染

三國紛爭 2023-04-27 10:21:45
我正在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;現在,我明白有一個額外的渲染并不是真正的問題,只是當我的應用程序增長時,我傾向于將這些組件中的幾個嵌套在一起,所以當我確實想最小化渲染量時,很難知道從哪里開始。所以,我的問題是:為什么會這樣?我可以防止這種雙重渲染嗎?如果可以,怎么做?如果不是,處理這個問題的正確方法是什么?
查看完整描述

1 回答

?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

這可能是因為您的應用程序包裝在React.StrictMode.?React 核心團隊表示雙重渲染是有意為之的。

這是 StrictMode 的一個有意特性。這只發生在開發中,并有助于發現放入渲染階段的意外副作用。我們只對帶有 Hooks 的組件執行此操作,因為它們更有可能在錯誤的位置意外產生副作用。

查看完整回答
反對 回復 2023-04-27
  • 1 回答
  • 0 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號