詳解Ref在React中的交叉用法
一、首先說(shuō)明下什么是Ref
Ref 轉(zhuǎn)發(fā)是一項(xiàng)將 ref 自動(dòng)地通過(guò)組件傳遞到其一子組件的技巧。對(duì)于大多數(shù)應(yīng)用中的組件來(lái)說(shuō),這通常不是必需的。但其對(duì)某些組件,尤其是可重用的組件庫(kù)是很有用的
Ref官網(wǎng)說(shuō)明:點(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組件中,類(lèi)似于key */}
<Test refs={testRef} />
)
}
3、ref在hooks中與類(lèi)組件一同使用
這里僅需要在類(lèi)組件的回調(diào)ref中手動(dòng)賦值給useRef對(duì)象即可,更多回調(diào)ref:這里
import ReactDom from 'react-dom';
const Fn = ()=>{
const testClassRef = useRef(null);
// 定義TestClass類(lèi)組件
class TestClass extends React.Component {
render() {
return (
<div >
我是TestClass類(lèi)組件 測(cè)試
</div>
)
}
}
console.log('testClassRef',testClassRef.current); // 會(huì)渲染兩次,第一次打印null,第二次是<div>我是TestClass類(lèi)組件 測(cè)試</div>
return (
{/* 這里之所以用refs而不用ref作為prop是因?yàn)閞ef會(huì)被react特殊處理,不會(huì)作為props透?jìng)鞯絩eact組件中,類(lèi)似于key */}
<TestClass
ref={el => {
console.log('new render refs')
testClassRef.current = ReactDom.findDOMNode(el);
}}
/>
)
}
4、ref在hooks中與class、react-redux一同使用
當(dāng)遇到connect包裹的類(lèi)組件時(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類(lèi)組件
class TestClass extends React.Component {
render() {
return (
<div >
我是TestClass類(lèi)組件 測(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類(lèi)組件 測(cè)試</div>
return (
{/* 這里之所以用refs而不用ref作為prop是因?yàn)閞ef會(huì)被react特殊處理,不會(huì)作為props透?jìng)鞯絩eact組件中,類(lèi)似于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 遠(yuǎn)程動(dòng)態(tài)組件實(shí)踐示例詳解
這篇文章主要為大家介紹了React 遠(yuǎn)程動(dòng)態(tài)組件實(shí)踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
淺談React + Webpack 構(gòu)建打包優(yōu)化
本篇文章主要介紹了淺談React + Webpack 構(gòu)建打包優(yōu)化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞
這篇文章給大家介紹了React使用context進(jìn)行跨級(jí)組件數(shù)據(jù)傳遞的方法步驟,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)React context組件數(shù)據(jù)傳遞有一定的幫助,感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)吧2024-01-01
用React實(shí)現(xiàn)一個(gè)類(lèi) chatGPT 的交互式問(wèn)答組件的方法詳解
這篇文章主要給大家詳細(xì)介紹如何用React實(shí)現(xiàn)一個(gè)類(lèi) chatGPT 的交互式問(wèn)答組件的方法,文中有詳細(xì)的代碼示例,對(duì)我們學(xué)習(xí)有一定的幫助,需要的朋友可以參考下2023-06-06

