最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析React refs的簡介

 更新時(shí)間:2021年07月27日 14:24:44   作者:喆星高照  
React中的Refs提供了一種方式,允許我們訪問DOM節(jié)點(diǎn)或在render方法中創(chuàng)建的React元素,本文給大家介紹react refs的相關(guān)知識,感興趣的朋友一起看看吧

一、是什么

Refs在計(jì)算機(jī)中稱為彈性文件系統(tǒng)(英語:Resilient File System,簡稱ReFS)

React中的Refs提供了一種方式,允許我們訪問DOM節(jié)點(diǎn)或在render方法中創(chuàng)建的React元素

本質(zhì)為ReactDOM.render()返回的組件實(shí)例,如果是渲染組件則返回的是組件實(shí)例,如果渲染dom則返回的是具體的dom節(jié)點(diǎn)

二、如何使用

創(chuàng)建ref的形式有三種:

  • 傳入字符串,使用時(shí)通過 this.refs.傳入的字符串的格式獲取對應(yīng)的元素
  • 傳入對象,對象是通過 React.createRef()  方式創(chuàng)建出來,使用時(shí)獲取到創(chuàng)建的對象中存在 current 屬性就是對應(yīng)的元素
  • 傳入函數(shù),該函數(shù)會在 DOM 被掛載時(shí)進(jìn)行回調(diào),這個(gè)函數(shù)會傳入一個(gè) 元素對象,可以自己保存,使用時(shí),直接拿到之前保存的元素對象即可
  • 傳入hook,hook是通過 useRef() 方式創(chuàng)建,使用時(shí)通過生成hook對象的 current 屬性就是對應(yīng)的元素

傳入字符串

只需要在對應(yīng)元素或組件中ref屬性

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
  render() {
    return <div ref="myref" />;
  }
}

訪問當(dāng)前節(jié)點(diǎn)的方式如下:

this.refs.myref.innerHTML = "hello";

傳入對象

refs通過React.createRef()創(chuàng)建,然后將ref屬性添加到React元素中,如下:

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
  render() {
    return <div ref={this.myRef} />;
  }
}

當(dāng)ref被傳遞給render中的元素時(shí),對該節(jié)點(diǎn)的引用可以在refcurrent屬性中訪問

const node = this.myRef.current;

傳入函數(shù)

當(dāng)ref傳入為一個(gè)函數(shù)的時(shí)候,在渲染過程中,回調(diào)函數(shù)參數(shù)會傳入一個(gè)元素對象,然后通過實(shí)例將對象進(jìn)行保存

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }
  render() {
    return <div ref={element => this.myref = element} />;
  }
}

獲取ref對象只需要通過先前存儲的對象即可

const node = this.myref 

傳入hook

通過useRef創(chuàng)建一個(gè)ref,整體使用方式與React.createRef一致

function App(props) {
  const myref = useRef()
  return (
    <>
      <div ref={myref}></div>
    </>
  )
}

獲取ref屬性也是通過hook對象的current屬性

const node = myref.current;

上述三種情況都是ref屬性用于原生HTML元素上,如果ref設(shè)置的組件為一個(gè)類組件的時(shí)候,ref對象接收到的是組件的掛載實(shí)例

注意的是,不能在函數(shù)組件上使用ref屬性,因?yàn)樗麄儾]有實(shí)例

三、應(yīng)用場景

在某些情況下,我們會通過使用refs來更新組件,但這種方式并不推薦,更多情況我們是通過propsstate的方式進(jìn)行去重新渲染子元素

過多使用refs,會使組件的實(shí)例或者是DOM結(jié)構(gòu)暴露,違反組件封裝的原則

例如,避免在Dialog組件里暴露open()close()方法,最好傳遞isOpen屬性

但下面的場景使用refs非常有用:

  • 對Dom元素的焦點(diǎn)控制、內(nèi)容選擇、控制
  • 對Dom元素的內(nèi)容設(shè)置及媒體播放
  • 對Dom元素的操作和對組件實(shí)例的操作
  • 集成第三方 DOM 庫

到此這篇關(guān)于React refs 的理解的文章就介紹到這了,更多相關(guān)React refs 的理解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于React Native 0.52實(shí)現(xiàn)輪播圖效果

    基于React Native 0.52實(shí)現(xiàn)輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了基于React Native 0.52實(shí)現(xiàn)輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • react組件memo useMemo useCallback使用區(qū)別示例

    react組件memo useMemo useCallback使用區(qū)別示例

    這篇文章主要為大家介紹了react組件memo useMemo useCallback使用區(qū)別的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    React實(shí)現(xiàn)文件分片上傳和下載的方法詳解

    在當(dāng)今的前端開發(fā)中,處理文件流操作已經(jīng)成為一個(gè)常見的需求,無論是上傳、下載、讀取、展示還是其他的文件處理操作,都需要高效且可靠地處理二進(jìn)制數(shù)據(jù),本文將深入探討如何使用 React 實(shí)現(xiàn)文件分片上傳和下載,并介紹相關(guān)的基本概念和技術(shù),需要的朋友可以參考下
    2023-08-08
  • React引入antd-mobile+postcss搭建移動端

    React引入antd-mobile+postcss搭建移動端

    本文給大家分享React引入antd-mobile+postcss搭建移動端的詳細(xì)流程,文末給大家分享我的一些經(jīng)驗(yàn)記錄使用antd-mobile時(shí)發(fā)現(xiàn)我之前配置的postcss失效了,防止大家踩坑,特此把解決方案分享到腳本之家平臺,需要的朋友參考下吧
    2021-06-06
  • React狀態(tài)管理Redux原理與介紹

    React狀態(tài)管理Redux原理與介紹

    redux是redux官方react綁定庫,能夠使react組件從redux store中讀取數(shù)據(jù),并且向store分發(fā)actions以此來更新數(shù)據(jù),這篇文章主要介紹了react-redux的設(shè)置,需要的朋友可以參考下
    2022-08-08
  • React項(xiàng)目中decorators裝飾器報(bào)錯(cuò)問題解決方案

    React項(xiàng)目中decorators裝飾器報(bào)錯(cuò)問題解決方案

    這篇文章主要介紹了React項(xiàng)目中decorators裝飾器報(bào)錯(cuò),本文給大家分享問題所在原因及解決方案,通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • React淺析Fragments使用方法

    React淺析Fragments使用方法

    這篇文章主要介紹了React Fragments使用方法,關(guān)于react Fragments,React中一個(gè)常見模式是為一個(gè)組件返回多個(gè)元素。Fragments 可以讓你聚合一個(gè)子元素列表,并且不在DOM中增加額外節(jié)點(diǎn)
    2022-12-12
  • 詳解React中多種組件通信方式的實(shí)現(xiàn)

    詳解React中多種組件通信方式的實(shí)現(xiàn)

    在React中,組件之間的通信是一個(gè)非常重要的話題,React提供了幾種方式來實(shí)現(xiàn)跨組件通信,下面小編將詳細(xì)講講其中幾種通信方式,并提供實(shí)際的代碼示例,需要的可以參考下
    2023-11-11
  • React操作真實(shí)DOM實(shí)現(xiàn)動態(tài)吸底部的示例

    React操作真實(shí)DOM實(shí)現(xiàn)動態(tài)吸底部的示例

    本篇文章主要介紹了React操作真實(shí)DOM實(shí)現(xiàn)動態(tài)吸底部的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 采用React編寫小程序的Remax框架的編譯流程解析(推薦)

    采用React編寫小程序的Remax框架的編譯流程解析(推薦)

    這篇文章主要介紹了采用React編寫小程序的Remax框架的編譯流程解析(推薦),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04

最新評論

上犹县| 毕节市| 菏泽市| 金湖县| 永善县| 石阡县| 遂宁市| 锦屏县| 玛沁县| 永寿县| 旬邑县| 常德市| 平乡县| 广平县| 苏尼特右旗| 南和县| 天津市| 白水县| 乌审旗| 泉州市| 绥德县| 新沂市| 合山市| 合江县| 扶余县| 宁波市| 康定县| 临沧市| 大英县| 湖州市| 扶绥县| 兴化市| 邢台市| 石屏县| 曲水县| 定南县| 南靖县| 海盐县| 开平市| 吉安市| 重庆市|