詳解Ref在React中的交叉用法
一、首先說明下什么是Ref
Ref 轉(zhuǎn)發(fā)是一項(xiàng)將 ref 自動(dòng)地通過組件傳遞到其一子組件的技巧。對(duì)于大多數(shù)應(yīng)用中的組件來說,這通常不是必需的。但其對(duì)某些組件,尤其是可重用的組件庫(kù)是很有用的
Ref官網(wǎng)說明:點(diǎn)擊這里
二、ref在hooks中的用法
1、ref在hooks中HTMLDom的用法
這里就如官網(wǎng)一樣正常使用即可,官網(wǎng)例子:這里
const Fn = ()=>{ const testRef = useRef(null); console.log('testRef',testRef.current); // 會(huì)渲染兩次,第一次打印null,第二次是<div>測(cè)試</div> return ( <div ref={testRef}>測(cè)試</div> ) }
2、ref在hooks中與函數(shù)式組件的用法
這里只需要將ref屬性透?jìng)鞯胶瘮?shù)式組件中即可
const Fn = ()=>{ const testRef = useRef(null); // 定義Test函數(shù)組件 const Test = ({ refs }) => <div ref={refs}>我是ReactDOM test</div>; console.log('testRef',testRef.current); // 會(huì)渲染兩次,第一次打印null,第二次是<div>我是ReactDOM test</div> return ( {/* 這里之所以用refs而不用ref作為prop是因?yàn)閞ef會(huì)被react特殊處理,不會(huì)作為props透?jìng)鞯絩eact組件中,類似于key */} <Test refs={testRef} /> ) }
3、ref在hooks中與類組件一同使用
這里僅需要在類組件的回調(diào)ref中手動(dòng)賦值給useRef對(duì)象即可,更多回調(diào)ref:這里
import ReactDom from 'react-dom'; const Fn = ()=>{ const testClassRef = useRef(null); // 定義TestClass類組件 class TestClass extends React.Component { render() { return ( <div > 我是TestClass類組件 測(cè)試 </div> ) } } console.log('testClassRef',testClassRef.current); // 會(huì)渲染兩次,第一次打印null,第二次是<div>我是TestClass類組件 測(cè)試</div> return ( {/* 這里之所以用refs而不用ref作為prop是因?yàn)閞ef會(huì)被react特殊處理,不會(huì)作為props透?jìng)鞯絩eact組件中,類似于key */} <TestClass ref={el => { console.log('new render refs') testClassRef.current = ReactDom.findDOMNode(el); }} /> ) }
4、ref在hooks中與class、react-redux一同使用
當(dāng)遇到connect包裹的類組件時(shí),因?yàn)樽钔鈱右呀?jīng)被包裹成了react-redux的Provider,所以需要將ref屬性透?jìng)魅缯嬲齊eact組件中,這個(gè)時(shí)候需要關(guān)注下connect的forwardRef屬性
import ReactDom from 'react-dom'; import { connect } from 'react-redux'; const Fn = ()=>{ const testClassRef = useRef(null); // 定義TestClass類組件 class TestClass extends React.Component { render() { return ( <div > 我是TestClass類組件 測(cè)試 </div> ) } } //定義TestClass的connect包裹后的組件 //forwardRef:true 設(shè)置redux允許將ref作為props傳入到connect包裹的組件中 const TestClassConnect = connect(null, null, null, { forwardRef: true })(TestClass); console.log('testClassRef',testClassRef.current); // 會(huì)渲染兩次,第一次打印null,第二次是<div>我是TestClass類組件 測(cè)試</div> return ( {/* 這里之所以用refs而不用ref作為prop是因?yàn)閞ef會(huì)被react特殊處理,不會(huì)作為props透?jìng)鞯絩eact組件中,類似于key */} <TestClassConnect ref={el => { console.log('new render refs') testClassRef.current = ReactDom.findDOMNode(el); }} /> ) }
以上就是詳解Ref在React中的交叉用法的詳細(xì)內(nèi)容,更多關(guān)于Ref在React中的交叉用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
React動(dòng)畫實(shí)現(xiàn)方案Framer Motion讓頁(yè)面自己動(dòng)起來
這篇文章主要為大家介紹了React動(dòng)畫實(shí)現(xiàn)方案Framer Motion讓頁(yè)面自己動(dòng)起來,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10ReactHook使用useState更新變量后,如何拿到變量更新后的值
這篇文章主要介紹了ReactHook使用useState更新變量后,如何拿到變量更新后的值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03React競(jìng)態(tài)條件Race Condition實(shí)例詳解
這篇文章主要為大家介紹了React競(jìng)態(tài)條件Race Condition實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11React Native中NavigatorIOS組件的簡(jiǎn)單使用詳解
這篇文章主要介紹了React Native中NavigatorIOS組件的簡(jiǎn)單使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01React State狀態(tài)與生命周期的實(shí)現(xiàn)方法
這篇文章主要介紹了React State狀態(tài)與生命周期的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03React Native 集成 ArcGIS 地圖的詳細(xì)過程
ArcGIS官方提供了 JavaScript SDK,也提供了 ArcGIS-Runtime-SDK-iOS,但是并沒有提供 React Native的版本,所以這里使用了 react-native-arcgis-mapview 庫(kù),本文給大家介紹React Native 集成 ArcGIS 地圖的詳細(xì)過程,感興趣的朋友跟隨小編一起看看吧2024-06-06