ReactHook有哪些

React 中常用的 Hooks 列表及用法

React Hooks 是 React 16.8 版本引入的一項重要特性,它極大地簡化和優化了函數組件的開發過程。以下是 React 中常用的 Hooks 列表及其詳細用法:

1. useState

useState 是用于在函數組件中添加狀態的 Hook。通過調用 useState,可以聲明一個狀態變量,并提供更新該狀態的方法。

const [state, setState] = useState(initialState);
  • state:當前的狀態值。
  • setState:更新狀態的函數。
  • initialState:狀態的初始值。

示例:

import React, { useState } from 'react';function Counter() {const [count, setCount] = useState(0);return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
}
2. useEffect

useEffect 是用于處理副作用的 Hook,例如數據獲取、訂閱或手動 DOM 操作。它類似于類組件中的 componentDidMountcomponentDidUpdatecomponentWillUnmount 的組合。

useEffect(effect, dependencies);
  • effect:副作用的回調函數。
  • dependencies:依賴項數組,當數組中的值發生變化時觸發 effect

示例:

import React, { useEffect, useState } from 'react';function Example() {const [count, setCount] = useState(0);useEffect(() => {document.title = `You clicked ${count} times`;}, [count]);return (<button onClick={() => setCount(count + 1)}>Click me</button>);
}
3. useContext

useContext 是用于訪問 React 的上下文(Context)的 Hook。它允許你從組件樹中任何位置讀取上下文值,而無需顯式傳遞 props。

const value = useContext(MyContext);

示例:

import React, { createContext, useContext } from 'react';const ThemeContext = createContext('light');function App() {return (<ThemeContext.Provider value="dark"><Toolbar /></ThemeContext.Provider>);
}function Toolbar() {const theme = useContext(ThemeContext);return <div>Current theme is {theme}</div>;
}
4. useReducer

useReducer 是用于管理復雜狀態邏輯的 Hook。它類似于 Redux 的 reducer 函數,適合處理多個狀態值或復雜的更新邏輯。

const [state, dispatch] = useReducer(reducer, initialState);

示例:

import React, { useReducer } from 'react';function reducer(state, action) {switch (action.type) {case 'increment':return { count: state.count + 1 };case 'decrement':return { count: state.count - 1 };default:throw new Error();}
}function Counter() {const [state, dispatch] = useReducer(reducer, { count: 0 });return (<div>Count: {state.count}<button onClick={() => dispatch({ type: 'increment' })}>+</button><button onClick={() => dispatch({ type: 'decrement' })}>-</button></div>);
}
5. useCallback

useCallback 是用于記憶函數的 Hook。它可以防止因為組件重新渲染導致方法被重新創建,起到緩存作用。

const memoizedCallback = useCallback(callback, dependencies);

示例:

import React, { useCallback, useState } from 'react';function ParentComponent() {const [count, setCount] = useState(0);const handleChildClick = useCallback(() => {console.log('Child clicked');}, []);return <ChildComponent onChildClick={handleChildClick} />;
}
6. useMemo

useMemo 是用于記憶計算結果的 Hook。它僅會在某個依賴項改變時才重新計算 memoized 值,從而避免不必要的開銷。

const memoizedValue = useMemo(computeFunction, dependencies);

示例:

import React, { useMemo, useState } from 'react';function ExpensiveComponent() {const [count, setCount] = useState(0);const expensiveValue = useMemo(() => computeExpensiveValue(count), [count]);return (<div><p>Expensive Value: {expensiveValue}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
}
7. useRef

useRef 是用于創建一個可變的引用對象的 Hook。它適用于保存 DOM 引用、計時器 ID 或其他不觸發重新渲染的值。

const refContainer = useRef(initialValue);

示例:

import React, { useRef } from 'react';function TextInputWithFocusButton() {const inputEl = useRef(null);const onButtonClick = () => {inputEl.current.focus();};return (<><input ref={inputEl} type="text" /><button onClick={onButtonClick}>Focus the input</button></>);
}
8. useLayoutEffect

useLayoutEffect 類似于 useEffect,但會在所有的 DOM 變更之后同步調用。它適用于需要測量布局并同步執行某些操作的場景。

useLayoutEffect(effect, dependencies);
9. useImperativeHandle

useImperativeHandle 是用于自定義暴露給父組件的實例值的 Hook。它通常與 ref 配合使用。

useImperativeHandle(ref, createHandle, dependencies);
10. useDebugValue

useDebugValue 是用于在開發者工具中顯示自定義 Hook 的調試標簽的 Hook。

useDebugValue(value);

總結

useImperativeHandle(ref, createHandle, dependencies);
10. useDebugValue

useDebugValue 是用于在開發者工具中顯示自定義 Hook 的調試標簽的 Hook。

useDebugValue(value);

總結

在這里插入圖片描述

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

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

相關文章

【PyQt5】PyQt5初探 - 一個簡單的例程

PyQt5初探 - 一個簡單的例程 引言一、安裝配置二、使用2.1 PyQt5簡單例程2.2 與c Qt深入對比 三、相關教程 引言 PyQt5是一個比較流行的Python圖形用戶界面(GUI)庫&#xff0c;它基于Qt庫&#xff08;一個跨平臺的C庫&#xff0c;用于開發應用程序的圖形界面&#xff09;為Pyt…

圖文詳解Java并發面試題

文章目錄 1、并發與并行2、線程安全3、線程、進程、協程4、線程間通信5、線程創建方式6、8G內存創建的線程數7、普通Java程序含有的線程8、start()、run()9、線程調度、6種狀態、強制停止線程、上下文切換10、守護線程、用戶線程11、 volatile 、synchronized12、sleep() 、 wa…

飛牛fnNAS存儲空間模式詳解

目錄 一、NAS的存儲空間 二、多硬盤對NAS速度的提升原理 三、多硬盤對數據安全的提升原理 四、多硬盤對容量的提升原理 五、磁盤陣列模式 六、飛牛NAS支持的存儲模式 七、具體如何選擇存儲空間模式 在數字化時代,數據是個人和企業發展的核心資產,但面臨硬盤損壞、病毒…

OpenCv高階(二十)——dlib臉部輪廓繪制

文章目錄 一、人臉面部輪廓繪制代碼實現1、定義繪制直線段的函數2、定義繪制凸包輪廓的函數3、讀取輸入圖像4、初始化dlib的人臉檢測器5、使用檢測器在圖像中檢測人臉&#xff08;參數0表示不進行圖像縮放&#xff09;6、加載dlib的68點人臉關鍵點預測模型7、遍歷檢測到的每個人…

WEBSTORM前端 —— 第3章:移動 Web —— 第3節:移動適配

目錄 一、移動Web基礎 1.谷歌模擬器 2.屏幕分辨率 3.視口 4.二倍圖 二、適配方案 三、rem 適配方案 四、less 1.less – 簡介 2.less – 注釋 3.less – 運算 4.less – 嵌套 5.less – 變量 6.less – 導入 7.less – 導出 8.less – 禁止導出 五…

Altium Disigner(16.1)學習-原理圖繪制以及必要操作

一、下載軟件 通過網盤分享的文件&#xff1a;Altium Designer 16.zip 鏈接: https://pan.baidu.com/s/1uBHeoJJ-iA2tXw3NRjCcdA?pwd7c3h 提取碼: 7c3h 復制這段內容后打開百度網盤手機App&#xff0c;操作更方便哦 --來自百度網盤超級會員v5的分享 二、建立工程 添加proje…

AI煉丹日志-25 - OpenAI 開源的編碼助手 Codex 上手指南

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完畢目前開始更新 Spring&#xff0c;一起深入淺出&#xff01; 大數據篇 300&#xff1a; Hadoop&…

Redis:安裝與常用命令

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Redis &#x1f525; 安裝 Redis 使?apt安裝 apt install redis -y?持遠程連接 修改 /etc/redis/redis.conf 修改 bind 127.0.0.1 為 bind 0.0.0.0 修改 protected-mode yes 為 protected-mo…

02 APP 自動化-Appium 運行原理詳解

環境搭建見 01 APP 自動化-環境搭建 文章目錄 一、Appium及Appium自動化測試原理二、Appium 自動化配置項三、常見 ADB 命令四、第一個 app 自動化腳本 一、Appium及Appium自動化測試原理 Appium 跨平臺、開源的 app 自動化測試框架&#xff0c;用來測試 app 應用程序&#x…

UDP/TCP協議全解

目錄 一. UDP協議 1.UDP協議概念 2.UDP數據報格式 3.UDP協議差錯控制 二. TCP協議 1.TCP協議概念 2.三次握手與四次揮手 3.TCP報文段格式&#xff08;重點&#xff09; 4.流量控制 5.擁塞控制 一. UDP協議 1.UDP協議概念 當應用層的進程1要向進程2傳輸報文&#xff…

AWS之數據分析

目錄 數據分析產品對比 1. Amazon Athena 3. AWS Lake Formation 4. AWS Glue 5. Amazon OpenSearch Service 6. Amazon Kinesis Data Analytics 7. Amazon Redshift 8.Amazon Redshift Spectrum 搜索服務對比 核心功能與定位對比 適用場景 關鍵差異總結 注意事項 …

第13講、Odoo 18 配置文件(odoo.conf)詳細解讀

1. 概述 Odoo 配置文件&#xff08;odoo.conf&#xff09;是管理 Odoo 服務器行為的核心工具&#xff0c;涵蓋了網絡、安全、數據庫、性能等多方面的關鍵參數。本文檔系統梳理 Odoo 18 配置文件的主要參數&#xff0c;結合實際應用場景&#xff0c;提供權威的配置建議與最佳實…

Python詳細實現Dash儀表盤:從零構建數據可視化界面

目錄 Python詳細實現Dash儀表盤&#xff1a;從零構建數據可視化界面一、引言&#xff1a;為什么選擇 Dash&#xff1f;二、Dash 的核心組成與工作流程三、項目目標使用數據&#xff1a; 四、數學模型與聚合公式五、儀表盤結構設計頁面設計結構如下&#xff1a; 六、完整代碼實現…

ubuntu磁盤掛載

在 Ubuntu 系統中&#xff0c;掛載額外的磁盤或分區是一項常見操作&#xff0c;無論是為了擴展存儲空間還是組織數據。本文將詳細介紹如何使用mount命令掛載文件系統&#xff0c;并處理可能遇到的問題。 1、掛載文件系統的基本步驟 1.1、 查找磁盤設備名稱 首先需要確定要掛載…

[9-2] USART串口外設 江協科技學習筆記(9個知識點)

1 2 3 智能卡、IrDA和LIN是三種不同的通信技術&#xff0c;它們在電子和汽車領域中有著廣泛的應用&#xff1a; ? 智能卡&#xff08;Smart Card&#xff09;&#xff1a; ? 是什么&#xff1a;智能卡是一種帶有嵌入式微處理器和存儲器的塑料卡片&#xff0c;可以存儲和處理數…

【js逆向_AES】全國二手房指數數據爬取

目標&#xff1a;請求參數signcode&#xff0c;請求結果data。 網址&#xff1a;aHR0cDovL3d3dy5jY2hpbmRleC5jb20vSG9tZS9pbmRleA 查看載荷 查看響應數據 點擊xhr&#xff0c;發現所有請求參數都是一個signCode&#xff0c;還是加密后的結果&#xff0c;對應結果中數據data也…

模塊化設計,static和extern(面試題常見)

文章目錄 一、函數的聲明和定義1.1 單個文件1.2 多個文件1.3 static和extern1.3.1 static修飾局部變量1.3.2 static修飾全局變量1.3.3 static修飾函數 總結 一、函數的聲明和定義 1.1 單個文件 一般我們在使用函數的時候&#xff0c;直接將函數寫出來就使用了 題目:寫一個函數…

PySide6 GUI 學習筆記——常用類及控件使用方法(地址類QUrl)

文章目錄 地址類QUrl主要功能URL 格式介紹常見 scheme&#xff08;協議&#xff09;類型QUrl 類常用方法常用方法示例典型應用場景 地址類QUrl QUrl 是 PySide6.QtCore 模塊中的一個類&#xff0c;用于處理和操作 URL&#xff08;統一資源定位符&#xff09;。它可以解析、構建…

GEE:獲取研究區的DEM數據

最近有粉絲追更 GEE 系列,說上次看完 DEM 代碼解析后,自己試著改了一版。今天咱們就來拆解他的優化版代碼 ——基于 SRTM 數據獲取研究區 DEM 并導出,順便聊聊怎么把 GEE 代碼寫得更專業! 先下結論:代碼邏輯完整,3 處細節值得新手抄作業! 這版代碼在數據加載→裁剪→可…

汽車安全 2030 預測 (功能安全FuSa、預期功能安全SOTIF、網絡安全CyberSecurity):成本、效益與行業影響

汽車安全 2030 預測 (功能安全FuSa、預期功能安全SOTIF、網絡安全CyberSecurity)&#xff1a;成本、效益與行業影響 到 2030 年&#xff0c;汽車行業將迎來一場安全技術的深度變革&#xff0c;其中 “三重安全防護”&#xff08;功能安全 FuSa、預期功能安全 SOTIF、網絡安全&…