React獲取DOM元素-ref屬性


React獲取DOM元素-ref屬性

類組件

通過ref給元素做標記(react不推薦使用)
        
    <div id="app"></div>
    <script type="text/babel">
        class App extends React.Component{
            componentDidMount(){  //類似於vue中mounted
                this.refs.textInput.focus()
            }
            render(){
                console.log("render")
                return (
                    <div>
                        <input ref="textInput"/>   
                    </div>
                )
            }
        }

        ReactDOM.render(<App/>,document.getElementById("app"))
    </script>
</body>
ref綁定-通過回調函數

通過回調函數方式綁定 給DOM元素添加個屬性textInput

在鈎子函數componentDidMount()進行調用

<body>
    
    <div id="app"></div>
    
    <script type="text/babel">
        class App extends React.Component{
            componentDidMount(){  
                this.textInput.focus()
            }
            render(){
                return (
                    <div>
                        <input ref={el=>this.textInput=el}/>   
                    </div>
                )
            }
        }

        ReactDOM.render(<App/>,document.getElementById("app"))
    </script>
</body>
ref綁定createRef

創建一個ref的應用,在組件或者DOM元素上通過ref做標記,通過current屬性獲取到dom組件

<body>
    
    <div id="app"></div>
    <script type="text/babel">
        class App extends React.Component{
            constructor(){
                super()  //繼承的時候,第一行必須要寫super  目的就是用來調用父類的構造函數
                this.myRef = React.createRef(); //01-創建了一個ref的引用
            }
            componentDidMount(){  
                //03 注意:使用current屬性才可以獲取到dom組件
                this.myRef.current.focus()
            }
            render(){
                return (
                    <div>
                        {/*02 需要在組件或者dom元素上通過ref做好標記*/}
                        <input ref={this.myRef}/>   
                    </div>
                )
            }
        }

        ReactDOM.render(<App/>,document.getElementById("app"))
    </script>
</body>

函數組件

函數組件內不能訪問到this的

想要在函數式組件內獲取dom元素,我們可以采用useRef這個hooks來去解決在函數式組件中給元素做標記的問題

<body>
    <div id="app"></div>
    
    <script type="text/babel">
        const App = props=>{
            //1. 通過useRef創建一個ref對象
            const inputEl = React.useRef(null);
            const onButtonClick = ()=>{
                //3. 通過inputEl.current屬性就可以獲取到綁定的input dom元素了。
                inputEl.current.focus()
            }
            return (
                <div>
                    {/*2. 通過ref綁定dom或者組件*/}
                    <input ref={inputEl}/>    
                    <button onClick={onButtonClick}>Focus the input</button>
                </div>
            )
        }

        ReactDOM.render(<App/>,document.getElementById("app"))
    </script>
</body>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM