示例: https: //codesandbox.io/s/react-hooks-playground-forked-15ctx ?file=/src/index.tsx一名父級具有 1 個 useState 掛鉤,3 個子級具有 1 個 useEffect 掛鉤。我希望子級通過回調更新父級中的狀態,以便所有組件狀態都更新為父級中的一個對象。這不適用于初始/第一次渲染,因為當前狀態不會在每個 useEffect 觸發的回調之間更新(請參見上面的示例或下面的代碼)。這意味著組合狀態僅包含最后一個子級的狀態。const ChildElement = ({ index, callback }) => { useEffect(() => { callback(index); }, []); return <>{index}</>;};const App = () => { const [state, setState] = useState(0); const callback = (index: any) => { const newObject = { a: index }; setState({ ...state, [index]: newObject }); }; console.log(state); return ( <> <ChildElement index={0} callback={callback} /> <ChildElement index={1} callback={callback} /> <ChildElement index={2} callback={callback} /> </> );};我可以在父級中聲明初始狀態,但這需要更多代碼我可以在渲染緩存中使用(我像 useStae 一樣手動更新的對象,但立即更改),但這感覺很臟鉤子 useReducer 是一個好的解決方案嗎?有什么建議么?解決這個問題的最佳方法是什么?
在孩子的第一次渲染 useEffect 上用舊狀態反應鉤子 useState
ABOUTYOU
2023-08-05 21:12:50