import {useRef, useState} from "react"; import type {SetStateAction} from "react"; type ReactStateAccessor<State> = ( ...args: [] | [SetStateAction<State>] ) => State; const useStateAccessors = <State>( initialState: State ): ReactStateAccessor<State> => { const [, setState] = useState(initialState); const stateRef = useRef(initialState); return (...args) => { if (args.length === 1) { const [newStateOrSetter] = args; stateRef.current = newStateOrSetter instanceof Function ? newStateOrSetter(stateRef.current) : newStateOrSetter; setState(stateRef.current); } return stateRef.current; }; }; export default useStateAccessors; export type {ReactStateAccessor};