解決React報錯Cannot assign to 'current' because it is a read-only property
總覽
當我們用一個null
值初始化一個ref
,但在其類型中不包括null
時,就會發(fā)生"Cannot assign to 'current' because it is a read-only property"錯誤。為了解決該錯誤,請在ref
的類型中包含null
。比如說,const ref = useRef<string | null>(null)
。
這里有個例子來展示錯誤是如何發(fā)生的。
// App.tsx import {useEffect, useRef} from 'react'; const App = () => { const ref = useRef<string>(null); useEffect(() => { // ?? Error: Cannot assign to 'current' because it is a read-only property.ts(2540) ref.current = 'hello'; }, []); return ( <div> <h2>hello world</h2> </div> ); }; export default App;
上面例子的問題在于,當我們將null
作為初始值傳遞到useRef
鉤子中時,并且我們傳遞給鉤子的泛型中沒有包括null
類型,我們創(chuàng)建了一個不可變的ref
對象。
正確的泛型
為了解決該錯誤,我們必須在傳遞給鉤子的泛型中包括null
類型。
// App.tsx import {useEffect, useRef} from 'react'; const App = () => { // ??? include null in the ref's type const ref = useRef<string | null>(null); useEffect(() => { ref.current = 'hello'; }, []); return ( <div> <h2>hello world</h2> </div> ); }; export default App;
在ref
的類型中,我們使用聯(lián)合類型來包括null
類型,這使它成為可變ref
對象。
現(xiàn)在這個例子中ref
的類型是字符串或null
,它的current
屬性可以賦值為這兩種類型中的任意一種的值。
DOM元素
如果你的引用指向一個DOM元素,情況也是一樣的。如果你需要改變ref
的current
屬性的值,你必須將鉤子的類型定為 const ref = useRef<HTMLElement | null>(null)
。
注意,如果你不直接賦值給它的current
屬性,你不必在 ref
的類型中包含 null
。
// App.tsx import {useEffect, useRef} from 'react'; const App = () => { const ref = useRef<HTMLInputElement>(null); useEffect(() => { ref.current?.focus(); }, []); return ( <div> <input ref={ref} type="text" defaultValue="" /> </div> ); }; export default App;
上述例子中的ref
是用來聚焦input
元素的。因為沒有對其.current
屬性進行賦值,所以沒有必要在其類型中包含null
。
原文鏈接:bobbyhadz.com/blog/react-…
以上就是解決React報錯Cannot assign to 'current' because it is a read-only property的詳細內容,更多關于React 報錯assign current的資料請關注腳本之家其它相關文章!
- 解決React報錯Property does not exist on type 'JSX.IntrinsicElements'
- 解決React報錯Property value does not exist on type HTMLElement
- 解決React報錯Property?'value'?does?not?exist?on?type?EventTarget
- Can't?perform?a?React?state?update?on?an?unmounted?component報錯解決
- Objects are not valid as a React child報錯解決
- 解決React報錯No duplicate props allowed
- 解決React報錯`value` prop on `input` should not be null
- 解決React報錯Property 'X' does not exist on type 'HTMLElement'
相關文章
react配置webpack-bundle-analyzer項目優(yōu)化踩坑記錄
這篇文章主要介紹了react配置webpack-bundle-analyzer項目優(yōu)化踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06react-router browserHistory刷新頁面404問題解決方法
本篇文章主要介紹了react-router browserHistory刷新頁面404問題解決方法,非常具有實用價值,需要的朋友可以參考下2017-12-12react?hooks頁面實時刷新方式(setInterval)
這篇文章主要介紹了react?hooks頁面實時刷新方式(setInterval),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03React中使用Echarts無法顯示title、tooltip等組件的解決方案
這篇文章主要介紹了React中使用Echarts無法顯示title、tooltip等組件的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03React?TypeScript?應用中便捷使用Redux?Toolkit方法詳解
這篇文章主要為大家介紹了React?TypeScript?應用中便捷使用Redux?Toolkit方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11react18中react-redux狀態(tài)管理的實現(xiàn)
本文主要介紹了react18中react-redux狀態(tài)管理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-05-05