在react16之后帶來了hooks之后,確實(shí)方便了很多組件開發(fā),也加快了函數(shù)式編程的速度,但是當(dāng)你通過useRef獲取子組件的時(shí)候,又恰好子組件是一個(gè)函數(shù)組件,那么將會報(bào)一個(gè)錯(cuò)誤:報(bào)這個(gè)錯(cuò)誤的主要原因是函數(shù)組件沒有實(shí)例對象,所以你沒辦法通過ref獲取子組件實(shí)例?
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
所以它提示你是否使用 forwardRef 將子組件包裹一下:
包裹一下之后就不會報(bào)錯(cuò)了,而且也可以拿到子組件實(shí)例了:但是子組件實(shí)例上面啥都沒有,是一個(gè)空對象?
這個(gè)時(shí)候還要在子組件上暴露出去幾個(gè)函數(shù),才可以讓父組件拿到子組件實(shí)例上的函數(shù):
// 暴露出去的實(shí)例對象應(yīng)該有哪些函數(shù)
useImperativeHandle(ref, () => ({
saveMd: () => {
console.log("保存markdown內(nèi)容");
localStorage.setItem("notes", htmlString)
}
}))
文章來源:http://www.zghlxwxcb.cn/news/detail-666779.html
這時(shí)候再看一下獲取到的子組件實(shí)例:就有了子組件暴露出去的函數(shù),就可以調(diào)用了文章來源地址http://www.zghlxwxcb.cn/news/detail-666779.html
到了這里,關(guān)于react通過ref獲取函數(shù)子組件實(shí)例方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!