react-use/src/useGetSet.ts
Renovate Bot a27f09fd36
chore: refactoring and rearrangement.
More DRY code. Also move non-hooks to separate directories.

BREAKING CHANGE: all `create*` factories been moved to `factory` subdirectory and in case direct import should be imported like `react-use/esm/factory/createBreakpoint`
BREAKING CHANGE: `comps` directory renamed to `component`
2021-01-30 23:30:26 +03:00

22 lines
632 B
TypeScript

import { Dispatch, useMemo, useRef } from 'react';
import useUpdate from './useUpdate';
import { IHookStateInitAction, IHookStateSetAction, resolveHookState } from './misc/hookState';
export default function useGetSet<S>(
initialState: IHookStateInitAction<S>
): [get: () => S, set: Dispatch<IHookStateSetAction<S>>] {
const state = useRef(resolveHookState(initialState));
const update = useUpdate();
return useMemo(
() => [
() => state.current as S,
(newState: IHookStateSetAction<S>) => {
state.current = resolveHookState(newState, state.current);
update();
},
],
[]
);
}