React 進階特性

1. ref

ref 是 React 提供的一種機制,用于訪問和操作 DOM 元素或 React 組件的實例。它可以用于獲取某個 DOM 元素的引用,從而執行一些需要直接操作 DOM 的任務,例如手動設置焦點、選擇文本或觸發動畫。

1.1. 使用 ref 的步驟

1. 創建一個 ref:使用 React.createRef 或 useRef Hook 創建一個 ref;

2. 將 ref 傳遞給 React 元素:將 ref 賦值給 React 元素的 ref 屬性;

3. 訪問 ref:通過 ref.current 訪問元素或組件實例;

1.2. 示例

import React, { useRef, useEffect } from 'react';function TextInput() {const inputRef = useRef(null);useEffect(() => {// 組件掛載后,input 元素獲取焦點inputRef.current.focus();}, []);return <input ref={inputRef} type="text" />
}export default TextInput;

1.3. ref 的函數形式

ref 可以直接賦值或通過函數進行賦值,在早期,ref 還支持傳遞字符串,但是新版本已經不再推薦這種寫法。

import React, { useRef, useEffect } from 'react';function TextInput() {const inputRef = useRef(null);useEffect(() => {// 組件掛載后,input 元素獲取焦點inputRef.current.focus();}, []);return <input ref={node => inputRef.current = node} type="text" />
}export default TextInput;

2. forwardRef

forwardRef 是一個用于轉發 ref 到子組件的方式,它允許父組件訪問子組件的 DOM 節點或組件實例。它常用于封裝第三方 UI 庫組件或實現高階組件。

注意:React19 棄用改用 props 傳值。

2.1. 使用 forwardRef

1. 定義一個函數組件:使用 React.forwardRef 包裹函數組件,使其能夠接收 ref;

2. 轉發 ref:在組件內部,將 ref 傳遞給某個子組件或 DOM 元素;

2.2. 示例

import React, { forwardRef } from 'react';const FancyButton = forwardRef((props, ref) => (<button ref={ref} className="fancy-button">{props.children}</button>
));function App() {const buttonRef = useRef(null);useEffect(() => {console.log(buttonRef.current); // 輸出 <button> 元素}, []);return <FancyButton ref={buttonRef}>Click me</FancyButton>;
}export default App;

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

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

相關文章

基于PHP的連鎖酒店管理系統

有需要請加文章底部Q哦 可遠程調試 基于PHP的連鎖酒店管理系統 一 介紹 連鎖酒店管理系統基于原生PHP開發&#xff0c;數據庫mysql&#xff0c;前端bootstrap。系統角色分為用戶和管理員。 技術棧 phpmysqlbootstrapphpstudyvscode 二 功能 用戶 1 注冊/登錄/注銷 2 個人中…

【大廠機試題解法筆記】報文響應時間

題目 IGMP 協議中&#xff0c;有一個字段稱作最大響應時間 (Max Response Time) &#xff0c;HOST收到查詢報文&#xff0c;解折出 MaxResponseTime 字段后&#xff0c;需要在 (0&#xff0c;MaxResponseTime] 時間 (s) 內選取隨機時間回應一個響應報文&#xff0c;如果在隨機…

邏輯回歸暴力訓練預測金融欺詐

簡述 「使用邏輯回歸暴力預測金融欺詐&#xff0c;并不斷增加特征維度持續測試」的做法&#xff0c;體現了一種逐步建模與迭代驗證的實驗思路&#xff0c;在金融欺詐檢測中非常有價值&#xff0c;本文作為一篇回顧性記錄了早年間公司給某行做反欺詐預測用到的技術和思路。百度…

Python爬蟲實戰:研究demiurge框架相關技術

1. 引言 在當今數字化時代,互聯網上蘊含著海量的有價值信息。爬蟲技術作為獲取這些信息的重要手段,被廣泛應用于學術研究、商業分析、輿情監測等多個領域。然而,構建一個高效、穩定且可維護的爬蟲系統面臨諸多挑戰,如網頁結構復雜多變、反爬機制日益嚴格、數據處理流程繁瑣…

Jenkins | Jenkins構建成功服務進程關閉問題

Jenkins構建成功服務進程關閉問題 1. 原因2. 解決 1. 原因 Jenkins 默認會在構建結束時終止所有由構建任務啟動的子進程&#xff0c;即使使用了nohup或后臺運行符號&。 2. 解決 在啟動腳本中加上 BULID_IDdontkillme #--------------解決jenkins 自動關閉進程問題-----…

深度學習習題2

1.如果增加神經網絡的寬度&#xff0c;精確度會增加到一個特定閾值后&#xff0c;便開始降低。造成這一現象的可能原因是什么&#xff1f; A、即使增加卷積核的數量&#xff0c;只有少部分的核會被用作預測 B、當卷積核數量增加時&#xff0c;神經網絡的預測能力會降低 C、當卷…

猜字符位置游戲-position gasses

import java.util.*;public class Main {/*字符猜位置游戲;每次提交只能被告知答對幾個位置;根據提示答對的位置數推測出每個字符對應的正確位置;*/public static void main(String[] args) {char startChar A;int gameLength 8;List<String> ballList new ArrayList&…

解析兩階段提交與三階段提交的核心差異及MySQL實現方案

引言 在分布式系統的事務處理中&#xff0c;如何保障跨節點數據操作的一致性始終是核心挑戰。經典的兩階段提交協議&#xff08;2PC&#xff09;通過準備階段與提交階段的協調機制&#xff0c;以同步決策模式確保事務原子性。其改進版本三階段提交協議&#xff08;3PC&#xf…

Towards Open World Object Detection概述(論文)

論文&#xff1a;https://arxiv.org/abs/2103.02603 代碼&#xff1a;https://github.com/JosephKJ/OWOD Towards Open World Object Detection 邁向開放世界目標檢測 Abstract 摘要 Humans have a natural instinct to identify unknown object instances in their environ…

QT3D學習筆記——圓臺、圓錐

類名作用Qt3DWindow3D渲染窗口容器QEntity場景中的實體&#xff08;對象或容器&#xff09;QCamera控制觀察視角QPointLight點光源QConeMesh圓錐幾何網格QTransform控制實體的位置/旋轉/縮放QPhongMaterialPhong光照材質&#xff08;定義顏色、反光等&#xff09;QFirstPersonC…

CSS | transition 和 transform的用處和區別

省流總結&#xff1a; transform用于變換/變形&#xff0c;transition是動畫控制器 transform 用來對元素進行變形&#xff0c;常見的操作如下&#xff0c;它是立即生效的樣式變形屬性。 旋轉 rotate(角度deg)、平移 translateX(像素px)、縮放 scale(倍數)、傾斜 skewX(角度…

夏普比率(Sharpe ratio)?

具有投資常識的人都明白&#xff0c;投資光看收益是不夠的&#xff0c;還要看承受的風險&#xff0c;也就是收益風險比。 夏普比率描述的正是這個概念&#xff0c;即每承受一單位的總風險&#xff0c;會產生多少超額的報酬。 用數學公式描述就是&#xff1a; 其中&#xff1…

C#學習第29天:表達式樹(Expression Trees)

目錄 什么是表達式樹&#xff1f; 核心概念 1.表達式樹的構建 2. 表達式樹與Lambda表達式 3.解析和訪問表達式樹 4.動態條件查詢 表達式樹的優勢 1.動態構建查詢 2.LINQ 提供程序支持&#xff1a; 3.性能優化 4.元數據處理 5.代碼轉換和重寫 適用場景 代碼復雜性…

計算機網絡備忘錄

計算機網絡 - 網絡互聯與互聯網 計算機網絡重點學習本章&#xff0c;屬于核心知識 包含網絡層和傳輸層 的 相關協議 計算機網絡層次重點掌握網絡層與傳輸層。其中網絡層主要是IP協議&#xff0c;解決主機-主機通信&#xff0c;傳輸層主要是TCP/UDP 協議&#xff0c;解決應用-…

跨界破局者魯力:用思辨與創新重塑汽車流通行業標桿

來源&#xff1a;投資家 在汽車流通行業深度變革的浪潮中&#xff0c;東莞東風南方汽車銷售服務有限公司塘廈分公司總經理魯力歷經近二十年行業深耕&#xff0c;構建了一條從汽車銷售顧問到區域運營掌舵者的進階范本。作為東風日產體系內兼具理論建構與實戰穿透力的標桿管理者…

玄機-日志分析-IIS日志分析

1.phpstudy-2018站點日志.(.log文件)所在路徑&#xff0c;提供絕對路徑 2.系統web日志中狀態碼為200請求的數量是多少 3.系統web日志中出現了多少種請求方法 4.存在文件上傳漏洞的路徑是什么(flag{/xxxxx/xxxxx/xxxxxx.xxx} 5.攻擊者上傳并且利用成功的webshell的文件名是什…

微信小程序開發知識點

1. 微信小程序開發知識點 1.1. 公共引用 1.1.1. 公共 wxss 在app.wxss文件下寫入組件樣式&#xff0c;也可使用import方式應用單獨公共樣式&#xff0c;避免了每個頁面單獨引用。 import "./public/wxss/base.wxss";1.1.2. 公共組件 在app.json文件下寫入組件&…

安卓基礎(編譯.Class)

方法安全性維護性開源友好度刪除.java用.class? 極低? 差?代碼混淆 (ProGuard)? 中等? 易?AAR 庫模塊? 高? 易? 對于.class 步驟 1&#xff1a;編譯生成 .class 文件 ??打開終端??&#xff08;Android Studio 底部的 Terminal 標簽頁&#xff09; 導航到你的模塊…

golang常用庫之-go-feature-flag庫(特性開關(Feature Flags))

文章目錄 golang常用庫之-go-feature-flag庫&#xff08;特性開關&#xff08;Feature Flags&#xff09;&#xff09;一、什么是特性開關&#xff08;Feature Flags&#xff09;二、go-feature-flag庫我可以使用 GO Feature Flag 做什么&#xff1f;選擇使用 Open Feature SDK…

微前端 - Module Federation使用完整示例

Angular 框架中 項目結構 main-app/src/app/app.module.tsapp.component.ts micro-app/src/app/app.module.tsapp.component.ts主應用配置 安裝必要依賴&#xff1a; ng add angular-architects/module-federation修改 webpack.config.js&#xff1a; const { share, Shar…