import {Dispatch, SetStateAction, useMemo, useState} from "react"; export function useDependentState( factory: (prevState?: S) => S, inputs: ReadonlyArray, ): [S, Dispatch>] { let skipCalculation = false; let [state, setState] = useState(() => { skipCalculation = true; return factory(undefined); }); useMemo(() => { if(skipCalculation) { return; } const newState = factory(state); if (newState !== state) { setState(state = newState); } }, inputs); return [state, setState]; }