深入解析 React 最新特性:革新、應用與最佳實踐

深入解析 React 最新特性:革新、應用與最佳實踐

1. 引言

React 作為前端開發的核心技術之一,近年來不斷推出 新的 API 和優化機制,從 Concurrent Rendering(并發模式)Server Components(服務器組件),都在不斷提升開發體驗和應用性能。

本文將深入解析 React 最新特性,包括 React 18 并發模式、useTransition、useDeferredValue、React Server Components、自動批處理(Automatic Batching) 等,并通過生動的示例展示不同方法的異同,幫助開發者掌握 React 生態的最新進展。


2. React 最新特性一覽

特性主要改進
Concurrent Rendering(并發模式)提高 UI 響應速度,優化高負載場景
Automatic Batching(自動批處理)多個狀態更新自動合并,提高性能
useTransition控制 UI 過渡狀態,提高交互體驗
useDeferredValue延遲計算復雜狀態,減少卡頓
React Server Components服務器渲染部分 UI,減少前端負擔

接下來,我們將通過 實際代碼示例 解析每個特性的使用方式。


3. Concurrent Rendering(并發模式)

🚀 Vue 2 vs Vue 3 的類比:

React 并發模式類似 Vue3 采用的 異步更新策略,允許 UI 任務 可中斷、可恢復,從而優化交互流暢度。

🛠 示例:阻塞 vs 并發渲染

傳統 React(阻塞渲染)
import { useState } from "react";function App() {const [text, setText] = useState("");const handleChange = (e) => {setText(e.target.value);heavyComputation(); // 耗時任務導致 UI 卡頓};return <input value={text} onChange={handleChange} />;
}
React 18 并發渲染(無 UI 卡頓)
import { useState, startTransition } from "react";function App() {const [text, setText] = useState("");const handleChange = (e) => {setText(e.target.value);startTransition(() => {heavyComputation(); // UI 更新不會卡頓});};return <input value={text} onChange={handleChange} />;
}

📌 關鍵不同點:

  • startTransition 讓 React 知道 heavyComputation() 任務是 非緊急任務,允許 UI 優先更新
  • 傳統 React 中,所有任務都會 同步執行,導致輸入框卡頓。

4. Automatic Batching(自動批處理)

🛠 示例:React 17 vs React 18 狀態更新

React 17(不會自動合并狀態更新)
function App() {const [count, setCount] = useState(0);const [message, setMessage] = useState("Hello");function handleClick() {setCount(count + 1);setMessage("Updated");console.log(count); // 仍然是舊值!}return <button onClick={handleClick}>Click me</button>;
}

在 React 17 中,setCountsetMessage 會觸發 兩次重新渲染

React 18(自動合并批處理)
function App() {const [count, setCount] = useState(0);const [message, setMessage] = useState("Hello");function handleClick() {setCount(count + 1);setMessage("Updated");console.log(count); // React 18 中,更新后 count 也是新值!}return <button onClick={handleClick}>Click me</button>;
}

📌 關鍵不同點:

  • React 18 自動合并 setState 調用,減少不必要的渲染,提高性能。
  • 開發者無需手動使用 ReactDOM.unstable_batchedUpdates 進行優化。

5. useTransition:優化 UI 過渡效果

🛠 示例:搜索輸入框優化

沒有 useTransition,UI 卡頓
function Search() {const [query, setQuery] = useState("");const [results, setResults] = useState([]);function handleChange(e) {setQuery(e.target.value);setResults(expensiveSearch(e.target.value)); // 計算量大,導致 UI 卡頓}return <input value={query} onChange={handleChange} />;
}
使用 useTransition,避免 UI 卡頓
import { useTransition } from "react";function Search() {const [query, setQuery] = useState("");const [results, setResults] = useState([]);const [isPending, startTransition] = useTransition();function handleChange(e) {setQuery(e.target.value);startTransition(() => {setResults(expensiveSearch(e.target.value));});}return <input value={query} onChange={handleChange} />;
}

📌 關鍵不同點:

  • useTransition 讓 React 識別 setResults低優先級任務,不會影響 UI 更新。
  • isPending 可用于顯示 加載狀態,提升用戶體驗。

6. React Server Components(服務器組件)

🛠 示例:前端 vs 服務器組件

傳統 React 組件(前端計算負擔大)
function UserProfile({ userId }) {const [user, setUser] = useState(null);useEffect(() => {fetch(`/api/user/${userId}`).then((res) => res.json()).then(setUser);}, [userId]);return <div>{user?.name}</div>;
}
React Server Components(服務器端預渲染)
export async function UserProfile({ userId }) {const user = await fetch(`/api/user/${userId}`).then(res => res.json());return <div>{user.name}</div>;
}

📌 關鍵不同點:

  • 服務器組件不會下載到客戶端,減少前端負擔。
  • 適用于數據密集型應用,如 CMS、儀表盤。

7. 結論

  • React 18 主要優化點: UI 并發渲染、自動批處理、優化狀態更新。
  • useTransitionuseDeferredValue 解決 UI 卡頓問題,提高交互體驗。
  • React Server Components 減少前端計算,提高應用響應速度。

React 正在不斷優化 性能與開發體驗,如果你還未升級 React 18,不妨嘗試這些新特性,帶來更絲滑的前端體驗!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73291.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73291.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73291.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【氮化鎵】高輸入功率應力誘導的GaN 在下的退化LNA退化

2019年,中國工程物理研究院電子工程研究所的Tong等人基于實驗與第一性原理計算方法,研究了Ka波段GaN低噪聲放大器(LNA)在高輸入功率應力下的退化機制。實驗結果表明,在27 GHz下施加1 W連續波(CW)輸入功率應力后,LNA的增益下降約1 dB,噪聲系數(NF)增加約0.7 dB。進一…

C#程序員接口調用工具與方法

作為專注于接口調用的C#軟件工程師&#xff0c;以下工具和方法能顯著提升開發效率與代碼質量&#xff1a; 一、接口開發與測試自動化工具 1. API測試與Mock工具 Postman Newman 支持RESTful/GraphQL接口調試與自動化測試&#xff0c;通過集合&#xff08;Collection&#xf…

Spring Boot項目中集成sa-token實現認證授權和OAuth 2.0第三方登錄

OAuth 2.0第三方登錄 OAuth 2.0 是一種授權協議&#xff0c;允許第三方應用在不暴露用戶密碼的情況下訪問用戶的資源。它通常用于第三方登錄場景&#xff0c;例如使用GitHub、Google等社交平臺進行登錄。 在sa-token框架中&#xff0c;OAuth 2.0第三方登錄可以通過集成sa-tok…

數字化新零售與 AI 大模型,如何重塑大健康賽道??

在數字化浪潮中&#xff0c;大健康賽道正經歷深刻變革。數字化新零售營銷模式的興起&#xff0c;與 AI 大模型的強大能力相結合&#xff0c;為大健康領域帶來了全新的發展機遇。 數字化新零售營銷模式融合線上線下&#xff0c;運用大數據、云計算分析消費者行為&#xff0c;實…

高速PCB設計(布線設計)

以下是針對高速PCB布線設計的綜合筆記&#xff0c;結合用戶提供的設計規范及行業通用原則整理而成&#xff1a; 一、關鍵信號布線原則 布線優先級 順序&#xff1a;射頻信號&#xff1e;中/低頻信號&#xff1e;時鐘信號&#xff1e;高速信號射頻信號需包地處理&#xff0c;線…

宇樹ROS1開源模型在ROS2中Gazebo中仿真

以GO1為例 1. CMakelists.txt更新語法 cmake_minimum_required(VERSION 3.8) project(go1_description) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find…

嵌入式學習第二十四天--網絡 服務器

服務器模型 tcp服務器: socket bind listen accept recv/send close 1.支持多客戶端訪問 //單循環服務器 socket bind listen while(1) { accept while(1) { recv/send } } close 2.支持多客戶端同時訪問 (并發能力) 并發服務器 socket bind …

使用GPTQ量化Llama-3-8B大模型

使用GPTQ量化8B生成式語言模型 服務器配置&#xff1a;4*3090 描述&#xff1a;使用四張3090&#xff0c;分別進行單卡量化&#xff0c;多卡量化。并使用SGLang部署量化后的模型&#xff0c;使用GPTQ量化 原來的模型精度為FP16&#xff0c;量化為4bit 首先下載gptqmodel量化…

防汛應急包,快速響應,守護安全

根據中國水利部統計&#xff0c;自1949年以來&#xff0c;我國幾乎每年都面臨洪水威脅&#xff0c;其中20世紀90年代后洪澇災害頻率顯著增加&#xff0c;僅1990-2009年間就發生超4000起較大災害&#xff0c;直接經濟損失近3萬億元&#xff0c;受災人口達20億人次。在2020年長江…

從 Vue 到 React:理解作用與副作用

作用 VS 副作用 響應式作用&#xff1a; 響應式作用是 Vue 響應式系統的一部分&#xff0c;它指的是跟蹤函數的依賴關系&#xff0c;并在它們的值發生變化時重新運行該函數的過程。watchEffect 是最直接的創建作用的方式&#xff08;如 watch 和 computed&#xff09;。 副作…

a = b c 的含義

簡單一句話&#xff1a; result condition && value; condition 為真取 value的值&#xff0c;condition為假就取condition的值&#xff0c;真取后假取前 // 示例 1: b 為真值 let b 1; let c 2; let a b && c; console.log(a); // 輸出: 2// 示例 2: b 為…

【大模型系列】llama.cpp本地運行大模型

上一篇鏈接: 【大模型系列】使用ollama本地運行千問2.5模型 我們講了ollama本地運行大模型&#xff0c;這里我們介紹另一種本地運行大模型的方法&#xff1a;llamacpp 軟件下載 下載地址&#xff1a;https://github.com/ggml-org/llama.cpp/releases 下載cpu版本的llamacpp&a…

PyQt基礎——簡單的圖形化界面(窗口)

一、代碼展示 import sysfrom PyQt6.QtGui import QPixmap from PyQt6.QtWidgets import QWidget, QApplication, QLabel, QLineEdit, QPushButton from PyQt6 import uic from PyQt6.QtCore import Qt# 封裝一個我的窗口類 class MyWidget(QWidget):def __init__(self):supe…

泰山派開發之—Ubuntu24.04下Linux開發環境搭建

簡介 最近翻到了吃灰已久的泰山派&#xff0c;是剛出來的時候用優惠券買的&#xff0c;當時價格挺便宜的&#xff0c;最近給它翻出來了&#xff0c;打算試試做個項目。買的泰山派容量是2G16G&#xff0c;SOC芯片使用的是RK3566&#xff0c;搭載1TOP算力的NPU&#xff0c;并且具…

HTTP 協議中常見的錯誤狀態碼(詳細介紹)

以下是 HTTP 協議中常見的錯誤狀態碼及其原因的總結&#xff0c;按錯誤類型分類整理&#xff1a; 4xx 客戶端錯誤 400 Bad Request 原因&#xff1a;請求格式錯誤&#xff0c;服務器無法解析。常見場景&#xff1a; 請求頭或請求體語法錯誤&#xff08;如 JSON/XML 格式錯誤…

kkFileView文件預覽組件部署說明

kkFileView組件部署流程指南 在數字化辦公與文件管理場景中&#xff0c;在線文件預覽功能極為關鍵。kkFileView作為一款優秀的開源在線文件預覽組件&#xff0c;支持多種格式文件的預覽&#xff0c;為企業和開發者提供了便捷的解決方案。下面將詳細介紹其部署步驟。 一、前期準…

[React Native]Stack、Tab和Drawer導航器詳解

對于StackNavigator&#xff0c;網頁[1]提到它用于頁面間的層級跳轉&#xff0c;使用棧結構管理頁面。網頁[4]和[8]詳細說明了navigationOptions的配置&#xff0c;比如標題、頭部樣式等。網頁[3]展示了如何在Stack中嵌入Tab導航&#xff0c;這可以作為組合使用的例子。 TabNa…

激光雷達產業觀察--速騰聚創發展脈絡2025.3.14

一.發展歷程 1.1 企業創立 速騰聚創的創立可追溯至2014年8月28日&#xff0c;這家充滿活力的高科技企業誕生于中國深圳。公司創始人邱純鑫是一位富有遠見的企業家&#xff0c;他的創業之路充滿了創新精神和技術洞察力。 邱純鑫的創業靈感源于他在哈爾濱工業大學深圳校區的學…

Kubernetes 網絡方案全解析:Flannel、Calico 與 Cilium 對比與選擇

文章目錄 Kubernetes 網絡方案全解析&#xff1a;Flannel、Calico 與 Cilium 對比與選擇Flannel —— 輕量級基礎網絡簡介核心特性適用場景 Calico —— 高性能與安全兼備的成熟方案簡介核心特性適用場景 Cilium —— 基于 eBPF 的下一代網絡方案簡介核心特性適用場景 深入對比…

OpenCV實現圖像分割與無縫合并

一、圖像分割核心方法 1、閾值分割 #include <opencv2/opencv.hpp> using namespace cv; int main() {Mat img imread("input.jpg", IMREAD_GRAYSCALE);Mat binary;threshold(img, binary, 127, 255, THRESH_BINARY); // 固定閾值分割imwrite("binary.…