首頁  >  文章  >  web前端  >  React 自動批次:如何最小化重新渲染並提高效能

React 自動批次:如何最小化重新渲染並提高效能

Patricia Arquette
Patricia Arquette原創
2024-10-23 06:27:02285瀏覽

React Automatic Batching: How to Minimize Re-Renders and Boost Performance

在大型 React 應用程式中,浪費的重新渲染可能是一個嚴重的問題,它會降低效能並使您的應用程式感覺緩慢。在 React 18 中,自動批次透過減少不必要的重新渲染來幫助優化效能,為開發人員提供更有效的方式來管理狀態更新。本指南將引導您了解 React 18 中自動批次的概念、為什麼它對效能如此重要,以及如何在您的應用程式中充分利用它。

簡介:大型 React 應用程式中浪費渲染的問題

假設您正在做飯,而不是一次製作所有菜餚,而是不斷來回單獨製作每道菜 - 顯然效率不高,對吧?當狀態更新被一一處理時,React 中也會發生相同的事情,導致多次渲染而不是一次渲染。這會導致處理浪費和效能下降,尤其是在大型應用程式中。

在 React 18 之前,同時發生的狀態更新通常會導致多次重新渲染。 React 18 透過自動批次解決了這個問題,它將多個更新分組到一個渲染週期中,從而減少不必要的重新渲染並提高效能。

React 18 中的自動批次是什麼?

看看新功能

自動批次是React 18中引入的一項功能,它允許React處理同一事件或效果中的多個狀態更新,然後僅觸發一次重新渲染。這可以最大限度地減少渲染次數並提高應用程式的整體效能。

在 React 18 之前,批次僅應用於事件處理程序內部。然而,React 18 將批次擴展到非同步函數(如 setTimeout、Promise 和事件偵聽器)中的所有 更新,使其更加強大和全面。

自動配料範例

以下是 React 18 中自動批次如何運作的範例:

import { useState } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0);
  const [text, setText] = useState('');

  function handleClick() {
    setCount(count + 1);
    setText('Updated');
    // Both updates are batched, and only one re-render happens
  }

  return (
    <div>
      <p>{count}</p>
      <p>{text}</p>
      <button onClick={handleClick}>Update</button>
    </div>
  );
}

在上面的程式碼中,計數和文字的狀態更新被一起批次處理,觸發一次重新渲染而不是兩次。這要歸功於 React 18 的自動批次。

為什麼它對性能很重要

它如何減少不必要的重新渲染

在 React 中,每次狀態改變時,都會發生重新渲染。如果您有多個狀態更新相繼發生,就像在事件處理程序中一樣,React 通常會觸發多個渲染。這可能會減慢您的應用程式的速度,尤其是在擴展時。

自動批次將這些狀態更新合併到單一渲染通道。想像一下,如果您正在填寫一個包含多個欄位的表單,並且每個輸入變更都會導致整個表單重新呈現。透過自動批次處理,React 一次處理所有這些更改,使 UI 感覺更流暢、更快。

自動批次處理的常見用例

事件處理程序和效果中的狀態更新範例

自動批次適用於多種情況,包括:

  1. 事件處理程序:React 已經在事件處理程序中批次更新,但現在它可以更好地處理多個更新,而無需不必要的渲染。
import { useState } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0);
  const [text, setText] = useState('');

  function handleClick() {
    setCount(count + 1);
    setText('Updated');
    // Both updates are batched, and only one re-render happens
  }

  return (
    <div>
      <p>{count}</p>
      <p>{text}</p>
      <button onClick={handleClick}>Update</button>
    </div>
  );
}
  1. 效果和非同步函數:使用 React 18,批次​​可以在 setTimeout 和 Promise 等非同步程式碼中無縫運行。
   function handleSubmit() {
     setFormSubmitted(true);
     setFormData({ ...formData, submittedAt: new Date() });
     // Only one re-render happens here
   }

這意味著即使在非同步操作中,React 也可以將多個更新組合在一起,從而提高效能並最大限度地減少重新渲染的次數。

使用flushSync進行手動批次處理:何時以及為何應使用它

什麼是flushSync?

在某些情況下,您可能需要手動控制狀態更新何時發生,特別是在處理動畫或關鍵 UI 更新時。這就是 flushSync 發揮作用的地方。它強制 React 立即處理更新,而不是與其他更新一起批次。

何時使用flushSync

在需要確保狀態立即更新並反映在 DOM 中的場景中,您應該使用flushSync,而不是等待 React 批次更新。這在時間至關重要的情況下通常是必要的,例如動畫或即時視覺回饋。

這是flushSync的工作原理:

   setTimeout(() => {
     setLoading(false);
     setUser({ name: 'John' });
     // These state changes are batched, so only one re-render
   }, 1000);

在此範例中,React 立即處理 setCount 更新,確保 DOM 立即反映更改,這對於時間敏感的操作非常有用。

結論:批次如何幫助優化現代應用程式中的 React 效能

React 18 的自動批次是一項改變遊戲規則的功能,它透過減少不必要的重新渲染來優化效能,使您的應用程式運行得更快、更流暢。透過將狀態更新分組到單一渲染中,React 確保您的應用程式的 UI 即使在擴充時也能保持響應靈敏且高效。

對於大多數用例,自動批次可以完美地開箱即用,但如果您需要更多控制,可以使用 flushSync 來即時處理更新。

透過利用這些功能,開發人員現在可以最大程度地減少浪費的渲染並提高 React 應用程式的整體效能,從而確保更好的使用者體驗。


準備好透過自動批次來優化您的 React 應用程式了嗎? 嘗試在您的下一個專案中實現此功能,看看它對您的應用程式效能有何提升!


如果您喜歡這篇文章,請考慮支持我的工作:

  • 請我喝杯咖啡
  • 預約電話尋求指導或職業建議
  • 在 Twitter 上追蹤我
  • 在 LinkedIn 上聯絡

以上是React 自動批次:如何最小化重新渲染並提高效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn