React中的Refs屬性你來瞭解嗎
1 介紹
react組件的三大屬性:
1.props
屬性:封裝傳遞給組件的參數
2.state
屬性:組件的狀態,當值發生改變後,重新渲染組件
3.refs
屬性:
(1)通過該屬性可以去訪問DOM元素或render函數中的react元素(虛擬的DOM元素) ——DOM元素或render函數中的react元素的代理(句柄)
(2)本質是ReactDOM.render()
函數返回的實例(組件實例或DOM節點)
Refs在計算機中稱為彈性文件系統。React中的Refs提供瞭一種方式,允許我們訪問DOM節點或在render方法中創建的React元素。本質為ReactDOM.render()
返回的組件實例,如果是渲染組件則返回的是組件實例,如果渲染dom則返回的是具體的dom節點。
作用:Refs時React提供給我們安全訪問DOM元素或者某個組件實例的句柄。在類組件中,React將ref屬性中第一個參數作為DOM中的句柄。在函數組件中,React用hooks的api useRef也能獲得ref。
2 使用方法
2.1 createRef(版本>=React16.3)
一般在構造函數中將refs分配給實例屬性,以供組件的其他方法中使用。
1、對於html元素:可以獲取元素實例
示例代碼:
class Refs extends React.Component { constructor(props) { super(props); // 在構造函數中初始化一個ref,然後在return中就可以使用瞭 this.myRef = React.createRef(); console.log(this.myRef); } componentDidMount() { // 在render()函數執行完成後調用 this.myRef.current.innerHTML = "橘貓吃不胖"; // this.myRef中有一個current屬性 } render() { return ( <div> {/*如果ref屬性被用於html,那麼它的值就是底層DOM元素*/} <div ref={this.myRef}></div> </div> ); } }
2、可以和類組件進行綁定 —— 代表類組件的實例
示例代碼:
class Refs extends React.Component { constructor(props) { super(props); this.myRef = React.createRef(); } componentDidMount() { // 在父組件中調用瞭子組件的方法 this.myRef.current.change(); } render() { return <Children ref={this.myRef}/> } } class Children extends React.Component { change() { console.log("橘貓吃不胖變身"); } render() { return <span>橘貓吃不胖</span> } }
2.2 回調Refs
React將在組件掛載時,會調用ref回調函數並傳入DOM怨怒是,當卸載時調用它並傳入null。早componentDidMount或componentDidUpdate觸發前,React會保證refs一定是最新的。
示例代碼:
class Refs extends React.Component { constructor(props) { super(props); this.targetRef = null; this.myRef = (e) => this.targetRef = e; } componentDidMount() { console.log("this.refs" + this.refs.container); } render() { return <div ref={this.myRef}> 橘貓吃不胖 </div> } }
2.3 String類型的Refs(已過時,不推薦使用)
示例代碼:
class Refs extends React.Component { constructor(props) { super(props); this.targetRef = null; this.myRef = (e) => this.targetRef = e; } componentDidMount() { console.log("this.refs" + this.refs.container); } render() { return <div ref={this.myRef}> 橘貓吃不胖 </div> } }
2.4 useRef(React Hooks)
function HookRef(props) { const inputElement = useRef(); return ( <div> <input ref={inputElement}/> <button onClick={() => { inputElement.current.focus() }}>獲得焦點 </button> </div> ) }
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!