1 回答

TA貢獻1993條經驗 獲得超6個贊
const [history, setHistory] = React.useState()
由于此處未指定類型,因此打字稿必須嘗試推斷它。它看到undefined被隱式傳遞給 use state,因此它假設狀態是(并且永遠是)undefined。那么這意味著setHistory期望能夠通過undefined。
您需要自己指定類型,以表示它可以是數字,也可以是未定義的:
const [history, setHistory] = React.useState<number | undefined>();
或者,如果它始終應該是一個數字,您也可以這樣做,但您需要提供一個數字的初始值:
const [history, setHistory] = React.useState<number>(42);
PS:這與您的問題無關,但我注意到這段代碼使用了一個常見錯誤:您在每次渲染上創建一個全新的對象并將其作為上下文值傳遞。
value={{ history, setHistory }}>
由于每次渲染都有一個新值,因此即使歷史記錄和 setHistory 沒有更改,它也會強制消耗上下文的任何內容重新渲染。要解決此問題,您應該記住該值,以便僅在實際更改時重新計算它:
const value = React.useMemo(() => {
return { history, setHistory };
}, [history]);
return (
<HistoryContext.Provider value={value}>
{children}
</HistoryContext.Provider>
);
添加回答
舉報