欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

react中的useImperativeHandle()和forwardRef()用法

 更新時(shí)間:2022年08月08日 09:40:20   作者:我們都是檸檬精誒  
這篇文章主要介紹了react中的useImperativeHandle()和forwardRef()用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、useImperativeHandle()

useImperativeHandle(ref, createHandle, [deps])

useImperativeHandle 可以讓你在使用 ref 時(shí)自定義暴露給父組件的實(shí)例值。在大多數(shù)情況下,應(yīng)當(dāng)避免使用 ref

這樣的命令式代碼。 useImperativeHandle 應(yīng)當(dāng)與 forwardRef 一起使用。

function FancyInput(props, ref) {
? const inputRef = useRef();
? useImperativeHandle(ref, () => ({
? ? focus: () => {
? ? ? inputRef.current.focus();
? ? }
? }));
? return <input ref={inputRef} ... />;
}
FancyInput = forwardRef(FancyInput);

在本例中,渲染 的父組件可以調(diào)用 inputRef.current.focus()。

二、forwardRef()

React.forwardRef 會(huì)創(chuàng)建一個(gè)React組件,這個(gè)組件能夠?qū)⑵浣邮艿?ref 屬性轉(zhuǎn)發(fā)到其組件樹下的另一個(gè)組件中。

這種技術(shù)并不常見,但在以下兩種場(chǎng)景中特別有用:

(1)轉(zhuǎn)發(fā) refs 到 DOM 組件

(2)在高階組件中轉(zhuǎn)發(fā) refs

React.forwardRef 接受渲染函數(shù)作為參數(shù)。React 將使用 props 和 ref 作為參數(shù)來調(diào)用此函數(shù)。此函數(shù)應(yīng)返回 React 節(jié)點(diǎn)。 FancyButton 使用 React.forwardRef 來獲取傳遞給它的 ref,然后轉(zhuǎn)發(fā)到它渲染的 DOM button。這樣,使用 FancyButton 的組件可以獲取底層 DOM 節(jié)點(diǎn) button 的 ref,并在必要時(shí)訪問,就像其直接使用 DOM button 一樣。

const FancyButton = React.forwardRef((props, ref) => ( ? // Step:3
? <button ref={ref} className="FancyButton"> ? ?// Step:4
? ? ? {props.children}
? </button>
));
const ref = React.createRef(); // Step:1
<FancyButton ref={ref}>Click me!</FancyButton>; // Step:2

在上述的示例中,React 會(huì)將 <FancyButton ref={ref}> 元素的 ref 作為第二個(gè)參數(shù)傳遞給 React.forwardRef 函數(shù)中的渲染函數(shù)。該渲染函數(shù)會(huì)將 ref 傳遞給 <button ref={ref}> 元素。 因此,當(dāng)React 附加了 ref 屬性之后,ref.current 將直接指向 <button> DOM 元素實(shí)例。 欲了解更多相關(guān)信息,請(qǐng)參閱官檔 refs 轉(zhuǎn)發(fā)。

以下是對(duì)上述示例發(fā)生情況的逐步解釋:(轉(zhuǎn)發(fā) refs 到 DOM 組件)

  • 我們通過調(diào)用 React.createRef 創(chuàng)建了一個(gè) React ref 并將其賦值給 ref 變量。
  • 我們通過指定 ref 為JSX 屬性,將其向下傳遞給 <FancyButton ref={ref}>。
  • React 傳遞 ref 給 forwardRef 內(nèi)函數(shù) (props, ref) => ...,作為其第二個(gè)參數(shù)。
  • 我們向下轉(zhuǎn)發(fā)該 ref 參數(shù)到 <button ref={ref}>,將其指定為 JSX 屬性。
  • 當(dāng) ref 掛載完成,ref.current 將指向 <button> DOM 節(jié)點(diǎn)。

三、案例

父組件

1、注冊(cè)

2、定義

3、觸發(fā)

子組件

1、暴露子組件方法,將 forwardRef 接受的 ref 屬性轉(zhuǎn)發(fā)到其組件樹下的另一個(gè)組件中

(1)

(2)

(3)父組件

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • react如何添加less環(huán)境配置

    react如何添加less環(huán)境配置

    這篇文章主要介紹了react如何添加less環(huán)境配置,本文給大家分享遇到問題及解決方案,結(jié)合示例代碼圖文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-05-05
  • react mobx 基本用法示例小結(jié)

    react mobx 基本用法示例小結(jié)

    mobx是一個(gè)輕量級(jí)的狀態(tài)管理器,所以很簡(jiǎn)單(單一全局?jǐn)?shù)據(jù)使用class)類有g(shù)et 數(shù)據(jù)方法,本文通過示例代碼介紹react mobx 基本用法,感興趣的朋友有一起看看
    2023-11-11
  • 淺談React 屬性和狀態(tài)的一些總結(jié)

    淺談React 屬性和狀態(tài)的一些總結(jié)

    下面小編就為大家?guī)硪黄獪\談React 屬性和狀態(tài)的一些總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • ReactNative短信驗(yàn)證碼倒計(jì)時(shí)控件的實(shí)現(xiàn)代碼

    ReactNative短信驗(yàn)證碼倒計(jì)時(shí)控件的實(shí)現(xiàn)代碼

    本篇文章主要介紹了ReactNative短信驗(yàn)證碼倒計(jì)時(shí)控件的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 詳解一個(gè)基于react+webpack的多頁(yè)面應(yīng)用配置

    詳解一個(gè)基于react+webpack的多頁(yè)面應(yīng)用配置

    這篇文章主要介紹了詳解一個(gè)基于react+webpack的多頁(yè)面應(yīng)用配置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • React中Redux核心原理深入分析

    React中Redux核心原理深入分析

    這篇文章主要介紹了如何在React中Redux原理,目前redux在react中使用是最多的,所以我們需要將之前編寫的redux代碼,融入到react當(dāng)中去,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-11-11
  • React?中的?setState?是同步還是異步

    React?中的?setState?是同步還是異步

    這篇文章主要介紹了React?中的?setState?是同步還是異步,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • 一文詳解ReactNative狀態(tài)管理redux-toolkit使用

    一文詳解ReactNative狀態(tài)管理redux-toolkit使用

    這篇文章主要為大家介紹了ReactNative狀態(tài)管理redux-toolkit使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序功能

    react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序功能

    這篇文章主要介紹了react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序,本文結(jié)合實(shí)例代碼講解react-dnd是如何實(shí)現(xiàn),代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • React中常見的TypeScript定義實(shí)戰(zhàn)教程

    React中常見的TypeScript定義實(shí)戰(zhàn)教程

    這篇文章主要介紹了React中常見的TypeScript定義實(shí)戰(zhàn),本文介紹了Fiber結(jié)構(gòu),F(xiàn)iber的生成過程,調(diào)和過程,以及 render 和 commit 兩大階段,需要的朋友可以參考下
    2022-10-10

最新評(píng)論