React hooks——useReducer

一、簡介

? ?useReducer?是 React 提供的一個高級 Hook,用于管理復雜的狀態邏輯。它類似于 Redux 中的 reducer 模式,適合處理包含多個子值、依賴前一個狀態或邏輯復雜的狀態更新場景。與?useState?相比,useReducer?提供更結構化的狀態管理方式。

1.1 核心概念

  • Reducer 函數

純函數,接收當前狀態?state?和操作指令?action,返回新狀態:

(state, action) => newState
  • Action

描述狀態變化的普通對象,通常包含?type?字段(操作類型)和可選數據?payload

  • Dispatch 函數

用于觸發狀態更新,調用方式:dispatch(action)

  • 初始狀態

可直接提供初始值,或通過?惰性初始化函數?生成(適合復雜初始邏輯)。


1.2 基礎語法

const [state, dispatch] = useReducer(reducer, initialArg, init?);
  • reducer:處理狀態更新的函數。

  • initialArg:初始狀態值或初始化函數的參數。

  • init(可選):初始化函數,返回初始狀態。

  • 無?init?函數(直接初始值):

    const [state, dispatch] = useReducer(reducer, { count: 0 });
  • 有?init?函數(惰性初始化):

    const [state, dispatch] = useReducer(reducer, initialArg, init);
    • initialArg:傳遞給?init?函數的參數。

    • init:函數,接收?initialArg?并返回實際初始狀態。

二、代碼實現

import React, { useReducer } from "react";function reducer(state, action) {switch (action.type) {case "INC":return state + 1;case "DEC":return state - 1;case "TO10":return 10;default:return state - 1;}
}export default function App() {const [num, dispatch] = useReducer(reducer, 0);return (<div><div>當前值:{num}</div><button onClick={() => dispatch({ type: "INC" })}>+1</button><button onClick={() => dispatch({ type: "DEC" })}>-1</button><button onClick={() => dispatch({ type: "TO10" })}>to10</button></div>);
}

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

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

相關文章

SEO中關于關鍵詞分類與布局的方法有那些

前邊我們說到關鍵詞挖掘肯定很重要&#xff0c;但如何把挖掘出來的關鍵詞用好更為重要&#xff0c;下邊我們就來說說很多seo剛入行的朋友比較頭疼的關鍵詞分類問題&#xff0c;為了更直觀的感受搭配了表格&#xff0c;希望可以給大家一些幫助!SEO優化之關鍵詞分類?挖掘出的關鍵…

考研最高效的準備工作是什么

從性價比的角度來說&#xff0c;考研最高效的準備工作是什么呢&#xff1f; 其實就是“卷成績”。 卷學校中各門課程的成績&#xff0c;卷考研必考的數學、英語、政治和專業課的成績。 因為現階段的考研&#xff0c;最看重的仍然是你的成績&#xff0c;特別是初試成績。 有了…

【Linux】基于Ollama和Streamlit快速部署聊天大模型

1.環境準備 1.1 安裝Streamlit 在安裝Streamlit之前&#xff0c;請確保您的系統中已經正確安裝了Python和pip。您可以在終端或命令行中運行以下命令來驗證它們是否已安裝 python --version pip --version一旦您已經準備好環境&#xff0c;現在可以使用pip來安裝Streamlit了。…

Jetpack - ViewModel、LiveData、DataBinding(數據綁定、雙向數據綁定)

一、ViewModel 1、基本介紹 ViewModel 屬于 Android Jetpack 架構組件的一部分&#xff0c;ViewModel 被設計用來存儲和管理與 UI 相關的數據&#xff0c;這些數據在配置更改&#xff08;例如&#xff0c;屏幕旋轉&#xff09;時能夠幸存下來&#xff0c;ViewModel 的生命周期與…

Go并發聊天室:從零構建實戰

大家好&#xff0c;今天我將分享一個使用Go語言從零開始構建的控制臺并發聊天室項目。這個項目雖然簡單&#xff0c;但它麻雀雖小五臟俱全&#xff0c;非常適合用來學習和實踐Go語言強大的并發特性&#xff0c;尤其是 goroutine 和 channel 的使用。 一、項目亮點與功能特性 …

瘋狂星期四第13天運營日報

網站運營第13天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 昨日訪問量 昨天大概60個ip, 同比上個星期是高點的&#xff0c;但是與星期四差別還是太大了。&#x1f602; 昨日搜索引擎收錄情況 百度依舊0收錄 …

吳恩達《AI for everyone》第二周課程筆記

機器學習項目工作流程以Echo/Alexa&#xff08;語音識別AI&#xff09;作為例子解釋&#xff1a; 1. collect data 收集數據——人為找很多人說 Alexa&#xff0c;并錄制音頻&#xff1b;并且還會讓一群人說其他詞語&#xff0c;比如hello 2. train model 訓練模型——用機器學…

uniapp props、$ref、$emit、$parent、$child、$on

1. uniapp props、ref、ref、ref、emit、parent、parent、parent、child、$on 1.1. 父組件和子組件 propsPage.vue導入props-son-view.vue組件的時候,我們就稱index.vue為父組件依次類推,在vue中只要能獲取到組件的實例,那么就可以調用組件的屬性或是方法進行操作 1.2. pr…

4、ubuntu | dify創建知識庫 | 上市公司個股研報知識庫

1、創建知識庫步驟 創建一個知識庫并上傳相關文檔主要涉及以下五個關鍵步驟&#xff1a; 創建知識庫&#xff1a;首先&#xff0c;需要創建一個新的知識庫。這可以通過上傳本地文件、從在線資源導入數據或者直接創建一個空的知識庫來實現。 指定分段模式&#xff1a;接下來是…

Kubernetes中為Elasticsearch配置多節點共享存儲

在Kubernetes中為Elasticsearch配置多節點共享存儲(ReadWriteMany)需結合存儲后端特性及Elasticsearch架構設計。 由于Elasticsearch默認要求每個節點獨立存儲數據(ReadWriteOnce),直接實現多節點共享存儲需特殊處理。 ??方案一:使用支持ReadWriteMany的存儲后端(推薦…

SpringBoot熱部署與配置技巧

配置文件SpringBoot 的熱部署Spring為開發者提供了一個名為spring-boot-devtools的模塊來使SpringBoot應用支持熱部署&#xff0c;提高開發者的開發效率&#xff0c;無需手動重啟SpringBoot應用相關依賴&#xff1a;<dependency> <groupId>org.springframework.boo…

Python與C#的三元運算符的寫法區別

一、語法結構對比??PyTorch示例??dev torch.device("cuda:0" if torch.cuda.is_available() else "cpu")??邏輯??&#xff1a;若torch.cuda.is_available()為真&#xff0c;則返回"cuda:0"&#xff0c;否則返回"cpu"。??作…

java 學習篇一

java知識點 一、windows不區分大小寫&#xff0c;linux區分大小寫 二、寫java需要JDK&#xff0c;一般運行環境需要JRE 三、JDK安裝一般是傻瓜是安裝 四、java主要工具javac、java&#xff1b;其中javac用于編譯.java -> .class&#xff1b;java用于執行.class文件執行時候不…

仙盟數據庫應用-外貿標簽打印系統 前端數據庫-V8--畢業論文-—-—仙盟創夢IDE

基于 Excel 標簽打印軟件的外貿打印流程優化與實踐摘要&#xff1a;在全球化外貿業務中&#xff0c;標簽打印是貨物流通、信息標識的關鍵環節。本文聚焦 “未來之窗云上打印技術” 的 Excel 標簽打印軟件&#xff0c;結合外貿平臺實際場景&#xff0c;分析其在打印流程中的應用…

【Linux】權限詳解 權限本質、權限屬性、su、sudo提權、chmod\chown\chgrp、文件類別

文章目錄一、權限的認識二、linux的權限本質三、linux的用戶su指令sudo提權四、linux角色五、文件權限屬性六、修改權限的指令操作chmod指令(權限只會驗證一次)chown/chgrp指令修改文件權限的八進制方案七、文件類別詳解一、權限的認識 什么是權限&#xff1f; 生活中處處都有權…

rman清理歸檔

1進入rman rman target / 2&#xff1a;列出所有歸檔日志的路徑 LIST ARCHIVELOG ALL; 3.然后在執行 crosscheck archivelog all;&#xff08;檢查 RMAN 存儲庫中記錄的歸檔日志是否在磁盤或備份存儲中實際存在。 4.然后在執行 delete noprompt expired archivelog all;&…

Selenium 處理動態網頁與等待機制詳解

在使用 Selenium 進行網頁自動化操作時&#xff0c;動態網頁往往是開發者遇到的第一個 “攔路虎”。想象一下&#xff1a;你明明在代碼中寫好了元素定位邏輯&#xff0c;運行時卻頻繁報錯 “元素不存在”&#xff0c;但手動打開網頁時元素明明就在眼前 —— 這很可能是因為網頁…

Salesforce 與外部系統實時集成:基于事件驅動的異步集成架構

在 Salesforce 與外部系統&#xff08;如 ERP、財務系統、物流系統等&#xff09;的實時集成中&#xff0c;“穩定性” 是核心挑戰 —— 既要保證數據同步的及時性&#xff0c;又要應對網絡波動、系統故障、并發沖突等不可控因素。以下從問題本質、技術瓶頸、解決方案細節三個維…

React 的 `cache()` 函數

文章目錄前言一、核心作用二、工作原理三、使用場景1. 避免重復數據請求2. 優化昂貴計算四、緩存規則詳解五、與其它緩存方式對比六、服務端特殊行為七、最佳實踐八、緩存失效策略九、使用限制十、與數據獲取庫集成總結&#xff1a;何時使用 cache()前言 React 的 cache() 函數…

大白編譯——autotools與cmake

注意: 本文內容于 2025-07-20 01:58:56 創建,可能不會在此平臺上進行更新。如果您希望查看最新版本或更多相關內容,請訪問原文地址:大白編譯——autotools與cmake。感謝您的關注與支持! 之前記錄了通過autotools編譯rpm包與deb包的步驟。參考小白編譯——rpm包與deb包 - …