TeaWeb/shared/js/ui/react-elements/Helper.ts
2020-12-08 12:14:53 +01:00

26 lines
No EOL
623 B
TypeScript

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