3.react useRef使用與常見問題

react useRef使用與常見問題

文章目錄

  • react useRef使用與常見問題
    • 1. Dom操作: useRef()
    • 2. 函數組件的轉發: React.forwardRef()
    • 3. 對普通值進行記憶, 類似于一個class的實例屬性
    • 4. 結合useEffect,只在更新時觸發
    • FAQ

1. Dom操作: useRef()

    // 1. Dom操作: useRef()let app = document.querySelector('#app');let root = ReactDOM.createRoot(app);let { useState, useEffect, useRef } = React;let Welcome = (props) => {const myRef = useRef()const handleClick = () =>{myRef.current.focus()}return (<div><button onClick={handleClick}>點擊</button><input ref={myRef} type='text' /></div>);}let element = (<Welcome />);root.render(element);

2. 函數組件的轉發: React.forwardRef()

      // 2. 函數組件的轉發: React.forwardRef()let app = document.querySelector('#app');let root = ReactDOM.createRoot(app);let { useState, useEffect, useRef, forwardRef } = React;let Head = forwardRef((props, ref)=> {return (<div>hello Head{/*將 ref 轉發到子組件的input上 */}<input ref={ref} type='text' /></div>)})let Welcome = (props) => {const myRef = useRef()const handleClick = () =>{// 點擊時候會觸發子組件的focus事件myRef.current.focus()}return (<div><button onClick={handleClick}>點擊</button>{/*ref 和組件關聯*/}<Head ref={myRef}></Head></div>);}let element = (<Welcome />);root.render(element);

3. 對普通值進行記憶, 類似于一個class的實例屬性

 // 3. 對普通值進行記憶, 類似于一個class的實例屬性let app = document.querySelector('#app');let root = ReactDOM.createRoot(app);let { useState, useEffect, useRef } = React;let Welcome = (props) => {// 響應式數據,具有記憶功能,點擊后響應式數據加1const [num, setNum] = useState(0);// let count = 0; // 普通的count不具有記憶功能const count = useRef(0) // 可以給普通值進行記憶操作const handleClick = () =>{count.current++;console.log(count.current);setNum(num + 1)// console.log(num); // 還是之前的值}return (<div><button onClick={handleClick}>點擊</button></div>);}let element = (<Welcome />);root.render(element);

4. 結合useEffect,只在更新時觸發

 // 4. 結合useEffect,只在更新時觸發let app = document.querySelector('#app');let root = ReactDOM.createRoot(app);let { useState, useEffect, useRef } = React;let Welcome = (props) => {// 響應式數據,具有記憶功能,點擊后響應式數據加1const [num, setNum] = useState(0);const isUpdate = useRef(false) useEffect(()=>{// 只在點擊時候觸發if (isUpdate.current) {console.log(num);}})const handleClick = () =>{setNum(num + 1)isUpdate.current = true// console.log(num); // 還是之前的值}return (<div><button onClick={handleClick}>點擊</button></div>);}let element = (<Welcome />);root.render(element);

FAQ

https://zh-hans.legacy.reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function

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

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

相關文章

一些指令工具

一、adb shell adb shell下一些常用命令行工具&#xff1a; pm&#xff1a;PackageManager&#xff0c;包管理器&#xff0c;用于管理應用程序的安裝、卸載、查詢和更多相關操作。 pm install …// pm uninstall …// pm list packages//設備上已安裝的應用程序 pm dump …//獲…

C運行時錯誤——error realloc(): invalid next size

在LeetCode做題時遇到一個運行時錯誤&#xff0c;將引起問題的原因記錄一下備忘&#xff1a; 我們在malloc或calloc等API分配內存時&#xff0c;libc庫除了分配給我們在參數中設定大小的內存&#xff08;可能會有內存對齊&#xff0c;實際分配的比參數設定的要多&#xff09;&…

填充柄功能

單元格右下角十字符號 順序式填充 輸入1,2&#xff0c;直接拉取即可實現順序1到10. 復制式填充 CtrlD或者拉取&#xff0c;選擇右下角復制單元格。 規律式填充 輸入星期一&#xff0c;星期二&#xff0c;下拉一直可以到星期日 自定義填充 選擇文件-》選項-》自定義序列 輸…

【python辦公自動化】PysimpleGUI中的popup彈窗中的按鈕設置居中

PysimpleGUI中的popup彈窗中的按鈕設置居中 背景問題解決背景 默認的popup彈窗中的OK按鈕是在最下面偏左側一些,有時需要將按鈕放置居中 問題解決 首先找到pysimplegui源代碼文件中popup的部分 然后定位到19388行,源文件內容如下 關于popup彈窗OK按鈕的設置,將pad屬性…

STM32——SPI外設總線

一、SPI外設簡介 STM32內部集成了硬件SPI收發電路&#xff0c;可以由硬件自動執行時鐘生成、數據收發等功能&#xff0c;減輕CPU的負擔【硬件電路自動生成時序】 可配置8位/16位數據幀、高位先行/低位先行 時鐘頻率&#xff1a; fPCLK / (2, 4, 8, 16, 32, 64, 128, 256)【SP…

面試之快速學習STL- vector

1. vector底層實現機制刨析&#xff1a; 簡述&#xff1a;使用三個迭代器表示的&#xff1a; &#xfffc; 這也就解釋了&#xff0c;為什么 vector 容器在進行擴容后&#xff0c;與其相關的指針、引用以及迭代器可能會失效的原因。 insert 整體向后移 erase 整體向前移…

關于uniapp微信小程序scroll-view組件使用show-scrollbar隱藏不了滾動條

這里關于使用 scroll-view組件 時候有滾動條 想要隱藏滾動條但是使用show-scrollbar沒有效果 這時候又使用類名隱藏滾動條 使用id隱藏滾動條都不行 解決方法&#xff1a;在使用 scroll-view組件 的頁面或者app 頁面加上以下代碼就可以了 ::-webkit-scrollbar {displa…

53.Linux day03 文件查看命令,vi/vim常用命令

今天進行了新的學習。 目錄 1.cat a.查看單個文件的內容&#xff1a; b.查看多個文件的內容&#xff1a; c.將多個文件的內容連接并輸出到一個新文件&#xff1a; d.顯示帶有行號的文件內容&#xff1a; 2.more 3.less 4.head 5.tail 6.命令模式 7.插入模式 8.圖…

BBS項目day04 文章詳情頁、點贊點菜、評論功能

一、路由 from django.contrib import admin from django.urls import path, re_path from app01 import views from django.views.static import serve from django.conf import settingsurlpatterns [path(admin/, admin.site.urls),# 注冊path(register/, views.register)…

【3Ds Max】布料命令的簡單使用

簡介 在3ds Max中&#xff0c;"布料"&#xff08;Cloth&#xff09;是一種模擬技術&#xff0c;用于模擬物體的布料、織物或軟體的行為&#xff0c;例如衣物、帆布等。通過應用布料模擬&#xff0c;您可以模擬出物體在重力、碰撞和其他外力作用下的變形和動態效果。…

蘋果審核:傳完包,郵箱收到 ITMS-90078: Missing Push Notification Entitlement

郵件原文&#xff1a; We identified one or more issues with a recent delivery for your app, "***" 1.0. Your delivery was successful, but you may wish to correct the following issues in your next delivery: ITMS-90078: Missing Push Notification En…

Java尋找數組的中心下標

目錄 1.題目描述 2.題解 分析 具體實現 1.題目描述 給你一個整數數組 nums &#xff0c;請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標&#xff0c;其左側所有元素相加的和等于右側所有元素相加的和。 如果中心下標位于數組最左端&#xff0c;那么左側數之和…

【C++ 記憶站】引用

文章目錄 一、引用概念二、引用特性1、引用在定義時必須初始化2、一個變量可以有多個引用3、引用一旦引用一個實體&#xff0c;再不能引用其他實體 三、常引用四、使用場景1、做參數1、輸出型參數2、大對象傳參 2、做返回值1、傳值返回2、傳引用返回 五、傳值、傳引用效率比較六…

label引用圖片出現??

參考latex 引用圖片“\ref figure”_latex \ref加上前綴fig_Junruiqwertyuiop的博客-CSDN博客 label需要放在caption后面&#xff0c;如 \caption{Overview of BERT.} \label{BERT} 猜測&#xff0c;label可能會根據圖表或者公式的caption與圖表或公式綁定并編號&#xff0…

【MT32F006】MT32F006之CS1237采集秤傳感器

本文最后修改時間&#xff1a;2023年06月07日 一、本節簡介 本文介紹如何使用MT32F006連接CS1237芯片采集秤傳感器。 二、實驗平臺 庫版本&#xff1a;V1.0.0 編譯軟件&#xff1a;MDK5.37 硬件平臺&#xff1a;MT32F006開發板&#xff08;主芯片MT32F006&#xff09; 仿真…

Chrome命令行開關

Electron 支持的命令行開關 –client-certificatepath 設置客戶端的證書文件 path . –ignore-connections-limitdomains 忽略用 , 分隔的 domains 列表的連接限制. –disable-http-cache 禁止請求 HTTP 時使用磁盤緩存. –remote-debugging-portport 在指定的 端口 通…

ORACLE中判斷表是否存在再刪除表避免報錯與MySql和SqlServer的不同

不同數據庫中drop a table if it exists的不同&#xff1a; In MySQL it is pretty easy to drop a table if it exists already. In Oracle and Microsoft’s SQL Server it is a little more complicated. Today I want to present you the solutions for these two DBMS’.…

常見的CRM系統報價

一個CRM系統大概多少錢&#xff1f;CRM系統的價格因為不同的廠商、功能、部署方式、用戶數等因素而有很大的差異&#xff0c;沒有一個固定的標準。但是&#xff0c;我們可以根據一些常見的CRM軟件的報價&#xff0c;對CRM價格有一個大致的了解。 一、CRM的部署方式 CRM系統的…

【RocketMQ】快速入門

文章目錄 消費模式同步消息異步消息單向消息延遲消息批量消息順序消息事務消息Tag標簽和Key鍵Tag的使用Key的使用 首先引入rocketmq的依賴 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><ve…

HackNos 3靶場

配置 進入控制面板配置網卡 第一步&#xff1a;啟動靶機時按下 shift 鍵&#xff0c; 進入以下界面 第二步&#xff1a;選擇第二個選項&#xff0c;然后按下 e 鍵&#xff0c;進入編輯界面 將這里的ro修改為rw single init/bin/bash&#xff0c;然后按ctrlx&#xff0c;進入…