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

react使用useImperativeHandle示例詳解

 更新時(shí)間:2022年09月23日 14:11:36   作者:前端蘭博  
這篇文章主要為大家介紹了react使用useImperativeHandle示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1.前言

相比大家看到useImperativeHandle會感到十分陌生,但部分開源代碼經(jīng)常會出現(xiàn)它的身影,網(wǎng)上查閱的資料也是含糊不清。經(jīng)過一翻資料查詢,終于摸清了一點(diǎn),現(xiàn)在分享給各位爺。

2.useImperativeHandle初探

React官網(wǎng)的定義

useImperativeHandle 可以讓你在使用 ref 時(shí)自定義暴露給父組件的實(shí)例值。

個(gè)人理解

官網(wǎng)的話用大白話解析:useImperativeHandle的作用是將子組件的指定元素暴漏給父組件使用。也就是父組件可以訪問到子組件內(nèi)部的特定元素。

3.獲取元素的幾種方式

下面我將逐步介紹獲取元素的方式,進(jìn)而引出今天的主角useImperativeHandle。

3.1 useRef:獲取組件內(nèi)部元素

import {useRef} from "react"
export default function() {
  //1.
  const ele = useRef()
  //3.獲取元素
  const getElememntP = () => {
    console.log(ele.current)
  }
  return <div >
    <button onClick={()=>getElememntP()}>獲取p元素</button>
    //2.
    <p ref={ref}></p>
  </div>
}

點(diǎn)擊按鈕,我們可以獲取到p元素。上面是useRef獲取元素的方法,先簡單小結(jié)下步驟

  • 引入useRef,定義變量
  • 在需要獲取的dom元素上使用ref進(jìn)行變量綁定
  • 使用變量.current獲取對應(yīng)元素

3.2 forwardRef:父組件獲取子組件內(nèi)部的一個(gè)元素

上面的useRef在函數(shù)組件可以獲取自身組件內(nèi)部的元素,但是如果我們需要在父組件獲取或者操作兒子組件的一個(gè)元素,此時(shí)forwardRef就隨之出現(xiàn)了。

father.js

import {useRef} from "react"
import Son from "./son"
export default function(){
  const eleP = useRef()
  const getElement = () => {
    console.log(eleP.current)
  }
  return <div>
    <button onClick={()=>getElement()}>點(diǎn)擊獲取子組件的p元素</button>
    <Son ref={eleP}/></div>
}

son.js

import {forwardRef} from "react"
export default forwardRef(function(props,ref){
  return <div >
    <p ref={ref}></p>
  </div>
})

父元素點(diǎn)擊按鈕后,可以獲取到兒子組件的p元素。

forwardRef在父組件獲取兒子組件內(nèi)部一個(gè)元素時(shí),操作如下。

  • 父組件按照useRef的規(guī)則綁定到兒子組件上
  • 兒子組件使用forwardRef包裹,并在函數(shù)組件傳遞的參數(shù)接收,第一個(gè)參數(shù)porps接收父組件傳遞的數(shù)據(jù),第二個(gè)ref接收的就是dom引用
  • 在需要獲取兒子組件的元素上直接綁定ref的值

3.3 useImperativeHandle:父組件可以獲取/操作兒子組件多個(gè)元素

經(jīng)過上面層層遞進(jìn),終于來到我們今天的主角了,請大聲告訴我她的名字:是usexxxHandle。它可以在父組件內(nèi)部直接獲取兒子組件任意的dom元素對象。

father.js

import {useRef} from "react"
import Son from "./son"
export default function(){
  const eleP = useRef()
  const getElement = () => {
    console.log(eleP.current.ele1.current)
    console.log(eleP.current.ele2.current)
  }
  return <div>
    <button onClick={()=>getElement()}>點(diǎn)擊獲取子組件元素</button>
    <Son ref={eleP}/></div>
}

son.js

import {useRef,forwardRef,useImperativeHandle} from "react"
export default forwardRef(function(props,ref){
  const ele1 = useRef()
  const ele2 = useRef()
  useImperativeHandle(ref,()=>{
    return {ele1,ele2}
  },[])
  return <div >
    <h2 ref={ele1}></h2>
    <h3 ref={ele2}></h3>
  </div>
})

結(jié)果

<h2></h2>
<h3></h3>

父組件點(diǎn)擊按鈕后,可以一次性獲取到多個(gè)標(biāo)簽元素,通過useImperativeHandle函數(shù)內(nèi)部返回的對象可以獲取對應(yīng)的標(biāo)簽。具體使用直接看例子就行,我列舉下useImperativeHandle的參數(shù)要求吧

useImperativeHandle(ref,()=>{
    return {dom1,dom2}
},[])

第一個(gè)參數(shù)是組件的第二個(gè)參數(shù)ref 第二個(gè)參數(shù)是一個(gè)回調(diào)函數(shù),內(nèi)部返回的對象就是拋給父組件的元素對象 第三個(gè)參數(shù)是一個(gè)依賴數(shù)組,類似useEffect的依賴數(shù)組,如果依賴數(shù)組內(nèi)部傳遞的數(shù)據(jù)發(fā)生改變,就會重新觸發(fā)回調(diào)函數(shù)。

以上就是react使用useImperativeHandle示例詳解的詳細(xì)內(nèi)容,更多關(guān)于react使用useImperativeHandle的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • React路由渲染方式與withRouter高階組件及自定義導(dǎo)航組件應(yīng)用詳細(xì)介紹

    React路由渲染方式與withRouter高階組件及自定義導(dǎo)航組件應(yīng)用詳細(xì)介紹

    這篇文章主要介紹了React路由三種渲染方式、withRouter高階組件、自定義導(dǎo)航組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • React Native 搭建開發(fā)環(huán)境的方法步驟

    React Native 搭建開發(fā)環(huán)境的方法步驟

    本篇文章主要介紹了React Native 搭建開發(fā)環(huán)境的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • React組件如何優(yōu)雅地處理異步數(shù)據(jù)詳解

    React組件如何優(yōu)雅地處理異步數(shù)據(jù)詳解

    這篇文章主要為大家介紹了React組件如何優(yōu)雅地處理異步數(shù)據(jù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 前端 react 實(shí)現(xiàn)圖片上傳前壓縮(縮率圖)

    前端 react 實(shí)現(xiàn)圖片上傳前壓縮(縮率圖)

    這篇文章主要介紹了前端 react 實(shí)現(xiàn)圖片上傳前壓縮(縮率圖),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • ReactJS入門實(shí)例教程詳解

    ReactJS入門實(shí)例教程詳解

    React.render?是?React?的最基本方法,用于將模板轉(zhuǎn)為?HTML?語言,并插入指定的?DOM?節(jié)點(diǎn),這篇文章主要介紹了ReactJS入門實(shí)例教程,需要的朋友可以參考下
    2022-06-06
  • 詳解react setState

    詳解react setState

    這篇文章主要介紹了react setState的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用react,感興趣的朋友可以了解下
    2021-04-04
  • React如何自定義輪播圖Carousel組件

    React如何自定義輪播圖Carousel組件

    這篇文章主要介紹了React如何自定義輪播圖Carousel組件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • React中項(xiàng)目路由配置與跳轉(zhuǎn)方法詳解

    React中項(xiàng)目路由配置與跳轉(zhuǎn)方法詳解

    這篇文章主要為大家詳細(xì)介紹了React中項(xiàng)目路由配置與跳轉(zhuǎn)方法的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2023-08-08
  • 2023年最新react面試題總結(jié)大全(附詳細(xì)答案)

    2023年最新react面試題總結(jié)大全(附詳細(xì)答案)

    React是一種廣泛使用的JavaScript庫,為構(gòu)建用戶界面提供了強(qiáng)大的工具和技術(shù),這篇文章主要給大家介紹了關(guān)于2023年最新react面試題的相關(guān)資料,文中還附有詳細(xì)答案,需要的朋友可以參考下
    2023-10-10
  • react中路由和按需加載的問題

    react中路由和按需加載的問題

    這篇文章主要介紹了react中路由和按需加載的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論