亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React報錯解決之ref返回undefined或null

 更新時間:2022年08月03日 12:04:49   作者:chuck  
最近使用react做個滾動監(jiān)聽獲取更多數(shù)據(jù)效果,當想獲取dom時發(fā)現(xiàn)怎么也獲取不到,下面這篇文章主要給大家介紹了關(guān)于React報錯解決之ref返回undefined或null的相關(guān)資料,需要的朋友可以參考下

總覽

當我們試圖在其對應(yīng)的DOM元素被渲染之前訪問其current屬性時,React的ref通常會返回undefined或者null。為了解決該問題,可以在useEffect鉤子中訪問ref,或者當事件觸發(fā)時再訪問ref。

import {useRef, useEffect} from 'react';

export default function App() {
  const ref = useRef();

  console.log(ref.current); // ??? undefined here

  useEffect(() => {
    const el2 = ref.current;
    console.log(el2); // ??? element here
  }, []);

  return (
    <div>
      <div ref={ref}>
        <h2>Hello</h2>
      </div>
    </div>
  );
}

useEffect

useRef()鉤子可以傳遞一個初始值作為參數(shù)。該鉤子返回一個可變的ref對象,ref對象上的current屬性被初始化為傳遞的參數(shù)。

我們沒有為useRef傳遞初始值,因此其current屬性設(shè)置為undefined。如果我們將null傳遞給鉤子,如果立即訪問其current屬性,將會得到null。

需要注意的是,我們必須訪問ref對象上的current屬性,以此來訪問設(shè)置了ref屬性的div元素。

當我們?yōu)樵貍鬟fref屬性時,比如說,<div ref={myRef} /> ,React將ref對象的.current屬性設(shè)置為相應(yīng)的DOM節(jié)點。

我們使用useEffect鉤子,是因為我們想要確保ref已經(jīng)設(shè)置在元素上,并且元素已經(jīng)渲染到DOM上。

如果我們嘗試在組件中直接訪問ref上的current屬性,我們會得到undefined,是因為 ref 還沒有被設(shè)置,而且 div 元素還沒有被渲染。

事件

你也可以在事件處理函數(shù)中訪問refcurrent屬性。

import {useRef, useEffect} from 'react';

export default function App() {
  const ref = useRef();

  console.log(ref.current); // ??? undefined here

  useEffect(() => {
    const el2 = ref.current;
    console.log(el2); // ??? element here
  }, []);

  const handleClick = () => {
    console.log(ref.current); // ??? element here
  };

  return (
    <div>
      <div ref={ref}>
        <h2>Hello</h2>
      </div>

      <button onClick={handleClick}>Click</button>
    </div>
  );
}

當用戶點擊按鈕的時候,ref已經(jīng)被設(shè)置好了,相應(yīng)的元素已經(jīng)被渲染到DOM中,所以我們能夠訪問它。

總結(jié)

可以在useEffect鉤子中訪問ref,或者當事件觸發(fā)時再訪問ref。也就是說,要確保元素已經(jīng)渲染到DOM上。

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

附:ref的值根據(jù)節(jié)點的類型而有所不同

  • 當在refHTML元素上使用該屬性時,ref在構(gòu)造函數(shù)中創(chuàng)建的屬性將React.createRef()接收底層DOM元素作為其current屬性。
  • 在ref自定義類組件上使用該屬性時,該ref對象將接收組件的已安裝實例作為其current。

您可能無法ref在函數(shù)組件上使用該屬性,因為它們沒有實例。

class CustomTextInput extends React.Component {
  constructor(props) {
    super(props);
    // create a ref to store the textInput DOM element
    this.textInput = React.createRef();
    this.focusTextInput = this.focusTextInput.bind(this);
  }

  focusTextInput() {
    // Explicitly focus the text input using the raw DOM API
    // Note: we're accessing "current" to get the DOM node
    this.textInput.current.focus();
  }

  render() {
    // tell React that we want to associate the <input> ref
    // with the `textInput` that we created in the constructor
    return (
      <div>
        <input
          type="text"
          ref={this.textInput} />

        <input
          type="button"
          value="Focus the text input"
          onClick={this.focusTextInput}
        />
      </div>
    );
  }
}

current當組件安裝時,React將為該屬性分配DOM元素,并null在卸載時將其分配回。ref更新發(fā)生之前componentDidMount或componentDidUpdate生命周期方法。

原文鏈接:bobbyhadz.com/blog/react-…

作者:Borislav Hadzhiev

相關(guān)文章

  • React?Native?Modal?的封裝與使用實例詳解

    React?Native?Modal?的封裝與使用實例詳解

    這篇文章主要介紹了React?Native?Modal?的封裝與使用,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • react中使用swiper的具體方法

    react中使用swiper的具體方法

    本篇文章主要介紹了react中使用swiper的具體方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • React中使用antd組件的方法

    React中使用antd組件的方法

    antd?是基于?Ant?Design?設(shè)計體系的?React?UI?組件庫,主要用于研發(fā)企業(yè)級中后臺產(chǎn)品,這篇文章主要介紹了React中使用antd組件,需要的朋友可以參考下
    2022-09-09
  • 一起來學(xué)習(xí)React元素的創(chuàng)建和渲染

    一起來學(xué)習(xí)React元素的創(chuàng)建和渲染

    這篇文章主要為大家詳細介紹了React元素的創(chuàng)建和渲染,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • React實現(xiàn)todolist功能

    React實現(xiàn)todolist功能

    這篇文章主要介紹了React實現(xiàn)todolist功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • react-router-dom?降低版本的兩種方法詳解

    react-router-dom?降低版本的兩種方法詳解

    這篇文章主要介紹了react-router-dom?降低版本的兩種方法,本篇文章就記錄下如何降低 react-router-dom 為 v5 版本的兩種方法,需要的朋友可以參考下
    2022-12-12
  • react學(xué)習(xí)筆記之state以及setState的使用

    react學(xué)習(xí)筆記之state以及setState的使用

    這篇文章主要介紹了react學(xué)習(xí)筆記之state以及setState的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 基于webpack開發(fā)react-cli的詳細步驟

    基于webpack開發(fā)react-cli的詳細步驟

    這篇文章主要介紹了基于webpack開發(fā)react-cli的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • React用法之高階組件的用法詳解

    React用法之高階組件的用法詳解

    高階組件也就是我們常說的HOC,是React中用于復(fù)用組件邏輯的一種高級技巧。這篇文章主要通過一些示例帶大家學(xué)習(xí)一下高階組件的使用,希望對大家有所幫助
    2023-04-04
  • 記錄一次完整的react hooks實踐

    記錄一次完整的react hooks實踐

    這篇文章主要介紹了記錄一次完整的react hooks實踐,通過一個簡單示例,介紹了react hooks,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03

最新評論