react useRef使用與常見問題
1. Dom操作: useRef()
// 1. Dom操作: useRef()
let app = document.querySelector('#app');
let root = ReactDOM.createRoot(app);
let { useState, useEffect, useRef } = React;
let Welcome = (props) => {
const myRef = useRef()
const handleClick = () =>{
myRef.current.focus()
}
return (
<div>
<button onClick={handleClick}>點擊</button>
<input ref={myRef} type='text' />
</div>
);
}
let element = (
<Welcome />
);
root.render(element);
2. 函數(shù)組件的轉(zhuǎn)發(fā): React.forwardRef()
// 2. 函數(shù)組件的轉(zhuǎn)發(fā): React.forwardRef()
let app = document.querySelector('#app');
let root = ReactDOM.createRoot(app);
let { useState, useEffect, useRef, forwardRef } = React;
let Head = forwardRef((props, ref)=> {
return (
<div>
hello Head
{/*將 ref 轉(zhuǎn)發(fā)到子組件的input上 */}
<input ref={ref} type='text' />
</div>
)
})
let Welcome = (props) => {
const myRef = useRef()
const handleClick = () =>{
// 點擊時候會觸發(fā)子組件的focus事件
myRef.current.focus()
}
return (
<div>
<button onClick={handleClick}>點擊</button>
{/*ref 和組件關(guān)聯(lián)*/}
<Head ref={myRef}></Head>
</div>
);
}
let element = (
<Welcome />
);
root.render(element);
3. 對普通值進行記憶, 類似于一個class的實例屬性
// 3. 對普通值進行記憶, 類似于一個class的實例屬性
let app = document.querySelector('#app');
let root = ReactDOM.createRoot(app);
let { useState, useEffect, useRef } = React;
let Welcome = (props) => {
// 響應(yīng)式數(shù)據(jù),具有記憶功能,點擊后響應(yīng)式數(shù)據(jù)加1
const [num, setNum] = useState(0);
// let count = 0; // 普通的count不具有記憶功能
const count = useRef(0) // 可以給普通值進行記憶操作
const handleClick = () =>{
count.current++;
console.log(count.current);
setNum(num + 1)
// console.log(num); // 還是之前的值
}
return (
<div>
<button onClick={handleClick}>點擊</button>
</div>
);
}
let element = (
<Welcome />
);
root.render(element);
4. 結(jié)合useEffect,只在更新時觸發(fā)
// 4. 結(jié)合useEffect,只在更新時觸發(fā)
let app = document.querySelector('#app');
let root = ReactDOM.createRoot(app);
let { useState, useEffect, useRef } = React;
let Welcome = (props) => {
// 響應(yīng)式數(shù)據(jù),具有記憶功能,點擊后響應(yīng)式數(shù)據(jù)加1
const [num, setNum] = useState(0);
const isUpdate = useRef(false)
useEffect(()=>{// 只在點擊時候觸發(fā)
if (isUpdate.current) {
console.log(num);
}
})
const handleClick = () =>{
setNum(num + 1)
isUpdate.current = true
// console.log(num); // 還是之前的值
}
return (
<div>
<button onClick={handleClick}>點擊</button>
</div>
);
}
let element = (
<Welcome />
);
root.render(element);
FAQ
https://zh-hans.legacy.reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function文章來源地址http://www.zghlxwxcb.cn/news/detail-655254.html
文章來源:http://www.zghlxwxcb.cn/news/detail-655254.html
到了這里,關(guān)于3.react useRef使用與常見問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!