react如何利用useRef、forwardRef、useImperativeHandle獲取并處理dom
React如何給組件設(shè)置ref屬性,如果直接綁給組件,代碼如下:
import { useRef } from "react" function MyInput() { return ( <input type="text"/> ) } function App() { const myRef = useRef(null) const handleClick = () => { ref.current.style.background = "red" ref.current.focus() } return ( <div> <button onClick={handleClick}>點擊</button> <MyInput ref={myRef}></MyInput> </div> ) }
此時點擊按鈕,發(fā)現(xiàn)無法正確拿到MyInput組件中的input元素,并且控制臺報錯。因為MyInput函數(shù)作用域中并沒有綁定ref。
根據(jù)提示,需要使用forwardRef(),寫法如下:
import { useRef,forwardRef } from "react" const MyInput = forwardRef(function MyInput(props,ref) { return ( <input type="text" ref={ref}/> ) }) function App() { const myRef = useRef(null) const handleClick = () => { ref.current.style.background = "red" ref.current.focus() } return ( <div> <button onClick={handleClick}>點擊</button> <MyInput ref={myRef}></MyInput> </div> ) }
但上述寫法會將MyInput組件中的input全部暴露出來,導(dǎo)致在其他組件中,可以對該元素進(jìn)行任意操作,如果僅想對外提供某些功能,需要修改為如下寫法:
import { useRef,forwardRef,useImperativeHandle } from "react" const MyInput = forwardRef(function MyInput(props,ref) { // 添加如下 const inputRef = useRef(null) useImperativeHandle(ref,()=>{ return { // 自定義方法 focus(){ inputRef.current.focus() } } }) return ( // <input type="text" ref={ref}/> <input type="text" ref={inputRef}/> ) }) function App() { const myRef = useRef(null) const handleClick = () => { ref.current.style.background = "red" ref.current.focus() } return ( <div> <button onClick={handleClick}>點擊</button> <MyInput ref={myRef}></MyInput> </div> ) }
再次點擊,可以發(fā)現(xiàn)只有focus會觸發(fā),背景色不會修改且控制臺會有提示。
到此這篇關(guān)于react中利用useRef、forwardRef、useImperativeHandle獲取并處理dom的文章就介紹到這了,更多相關(guān)react useRef、forwardRef、useImperativeHandle獲取dom內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- React中useRef hook的簡單用法
- React?Hooks的useState、useRef使用小結(jié)
- React?Hooks中?useRef和useImperativeHandle的使用方式
- React Hooks之useRef獲取元素示例詳解
- react中useRef的應(yīng)用使用詳解
- 重新理解?React?useRef原理
- 教你react中如何理解usestate、useEffect副作用、useRef標(biāo)識和useContext
- React中useRef的具體使用
- React組件設(shè)計過程之仿抖音訂單組件
- react如何使用useRef模仿抖音標(biāo)題里面添加標(biāo)簽內(nèi)容
相關(guān)文章
react性能優(yōu)化達(dá)到最大化的方法 immutable.js使用的必要性
這篇文章主要為大家詳細(xì)介紹了react性能優(yōu)化達(dá)到最大化的方法,一步一步優(yōu)化react性能的過程,告訴大家使用immutable.js的必要性,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03詳解react使用react-bootstrap當(dāng)輪子造車
本篇文章主要介紹了詳解react使用react-bootstrap當(dāng)輪子造車,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-08-08react中實現(xiàn)修改input的defaultValue
這篇文章主要介紹了react中實現(xiàn)修改input的defaultValue方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05React Grid Layout基礎(chǔ)使用示例教程
React Grid Layout是一個用于在React應(yīng)用程序中創(chuàng)建可拖拽和可調(diào)整大小的網(wǎng)格布局的庫,通過使用React Grid Layout,我們可以輕松地創(chuàng)建自適應(yīng)的網(wǎng)格布局,并實現(xiàn)拖拽和調(diào)整大小的功能,本文介紹了React Grid Layout的基礎(chǔ)使用方法,感興趣的朋友一起看看吧2024-02-02