1 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個贊
如文檔中所述:
initialState
參數(shù)是初始渲染期間使用的狀態(tài)。在隨后的渲染中,它被忽略。如果初始狀態(tài)是昂貴計算的結(jié)果,您可以提供一個函數(shù),該函數(shù)將僅在初始渲染時執(zhí)行。
因此,在傳遞一個值時,每次渲染都會計算該值。
// Will call JSON.parse and get item "count" from local storage
// on **every** render
const [count, setCount] = useState(JSON.parse(localStorage.getItem("count")))
傳遞回調(diào)只會調(diào)用一次。
// Will call JSON.parse and get item "count" from local storage
// **once** on initial render
const [count, setCount] = useState(()=>JSON.parse(localStorage.getItem("count")))
在下一個示例中,將一個值calc()(類似于第一種情況)作為初始狀態(tài)將在每次渲染時記錄“調(diào)用”。雖然有回調(diào),但不會。
const calc = () => {
console.log("called");
return 42;
};
const App = () => {
// value: calc()
// const [state, setState] = useState(calc());
// callback : () => calc()
const [state, setState] = useState(calc);
return (
<>
{state}
<button onClick={() => setState(p => p + 1)}>render</button>
</>
);
};
添加回答
舉報