正文從這開始~
使用型別守衛來解決React中useRef
勾點「Object is possibly null」的錯誤。比如說,if (inputRef.current) {}
。一旦null
被排除在ref
的型別之外,我們就能夠存取ref
上的屬性。
下面是一個錯誤如何發生的範例。
import {useEffect, useRef} from 'react';
export default function App() {
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
// ⛔️ Object is possibly 'null'.ts(2531)
inputRef.current.focus();
}, []);
return (
<div>
<input ref={inputRef} type="text" id="message" />
<button>Click</button>
</div>
);
}
程式碼片段中的問題是,TypeScript不能確保我們將一個元素或者一個值賦值給ref,所以它的current
屬性可能為null
。
為了解決這個錯誤,在存取ref型別上的屬性之前,我們必須使用型別守衛來從其型別中排除null
。
import {useEffect, useRef} from 'react';
export default function App() {
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
//