1 回答

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