日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

react 子组件ref_React中Ref 的使用方法详解

發布時間:2024/10/8 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 react 子组件ref_React中Ref 的使用方法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了React中Ref 的使用方法。分享給大家供大家參考,具體如下:

React中Ref 的使用 React v16.6.3

在典型的React數據流中,props是父組件與其子組件交互的唯一方式。要修改子項,請使用new props 重新呈現它。但是,在某些情況下,需要在典型數據流之外強制修改子項。要修改的子項可以是React組件的實例,也可以是DOM元素。對于這兩種情況,React都提供了api。

何時使用refs

refs有一些很好的用例:

1.文本選擇或媒體播放。

2.觸發勢在必行的動畫。

3.與第三方DOM庫集成。

避免將refs用于可以聲明性地完成的任何操作。

*不要過度使用Refs

舊版API:字符串引用

如果您之前使用過React,那么您可能熟悉一個舊的API,其中ref屬性是一個字符串"textInput",并且DOM節點被訪問為this.refs.textInput。建議不要使用它,因為字符串引用有一些問題,被認為是遺留問題,很可能會在未來的某個版本中刪除。

回調引用

當組件安裝時,React將使用DOM元素調用ref回調,并在卸載時調用null。

在componentDidMount或componentDidUpdate觸發之前,Refs保證是最新的.

class CustomTextInput extends React.Component {

constructor(props) {

super(props);

this.textInput = null;

this.setTextInputRef = element => {

this.textInput = element;

};

this.focusTextInput = () => {

// Focus the text input using the raw DOM API

if (this.textInput) this.textInput.focus();

};

}

componentDidMount() {

// autofocus the input on mount

this.focusTextInput();

}

render() {

// Use the `ref` callback to store a reference to the text input DOM

// element in an instance field (for example, this.textInput).

return (

type="text"

ref={this.setTextInputRef}

/>

type="button"

value="Focus the text input"

onClick={this.focusTextInput}

/>

);

}

}

refs例子--點擊獲取input焦點

class Example extends React.Component {

handleClick() {

// 使用原生的 DOM API 獲取焦點

this.refs.myInput.focus

();

}

render() {

// 當組件插入到 DOM 后,ref 屬性添加一個組件的引用于到 this.refs

return (

type="button"

value="點我輸入框獲取焦點"

onClick={this.handleClick.bind(this)}

/>

);

}

}

使用React.createRef()

React.createRef()React 16.3中引入的API。如果您使用的是早期版本的React,我們建議您使用回調引用。

創建React.createRef()

Refs是使用屬性創建的,React.createRef()并通過ref屬性附加到React元素。在構造組件時,通常將Refs分配給實例屬性,以便可以在整個組件中引用它們。

class MyComponent extends React.Component {

constructor(props) {

super(props);

this.myRef = React.createRef();

}

render() {

return

}

}

訪問ref

當ref被傳遞給元素時render,對該節點的引用變得可以在currentref 的屬性處訪問

const node = this.myRef.current;

ref的值根據節點的類型而有所不同

當在refHTML元素上使用該屬性時,ref在構造函數中創建的屬性將React.createRef()接收底層DOM元素作為其current屬性。

在ref自定義類組件上使用該屬性時,該ref對象將接收組件的已安裝實例作為其current。

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

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 ref

// with the `textInput` that we created in the constructor

return (

type="text"

ref={this.textInput} />

type="button"

value="Focus the text input"

onClick={this.focusTextInput}

/>

);

}

}

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

無法在函數組件上使用ref屬性

function MyFunctionComponent() {

return ;

}

class Parent extends React.Component {

constructor(props) {

super(props);

this.textInput = React.createRef();

}

render() {

// This will *not* work!

return (

);

}

}

**如果需要引用它,則應該將組件轉換為類,就像您需要生命周期方法或狀態時一樣。

但是,只要引用DOM元素或類組件,就可以在函數組件中使用該ref屬性:**

function CustomTextInput(props) {

// textInput must be declared here so the ref can refer to it

let textInput = React.createRef();

function handleClick() {

textInput.current.focus();

}

return (

type="text"

ref={textInput} />

type="button"

value="Focus the text input"

onClick={handleClick}

/>

);

}

將DOM引用公開給父組件

在極少數情況下,可能希望從父組件訪問子節點的DOM節點。通常不建議這樣做,因為它會破壞組件封裝,但它偶爾可用于觸發焦點或測量子DOM節點的大小或位置。

雖然可以向子組件添加引用,但這不是一個理想的解決方案,因為只能獲得組件實例而不是DOM節點。此外,這不適用于功能組件。

如果使用React 16.3或更高版本,我們建議在這些情況下使用ref forwarding。引用轉發允許組件選擇將任何子組件的引用公開為自己的組件。可以在ref轉發文檔中找到有關如何將子DOM節點公開給父組件的詳細示例。

如果您使用React 16.2或更低版本,或者您需要比ref轉發提供的更多靈活性,您可以使用此替代方法并明確地將ref作為不同名稱的prop傳遞。

如果可能,建議不要暴露DOM節點,但它可以是一個有用的逃生艙。請注意,此方法要求向子組件添加一些代碼。如果您完全無法控制子組件實現,則最后一個選項是使用findDOMNode(),但不鼓勵使用它StrictMode。

希望本文所述對大家react程序設計有所幫助。

總結

以上是生活随笔為你收集整理的react 子组件ref_React中Ref 的使用方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。