Skip to main content

useStateWithReset

/**
* @template T
* @param {T | (() => T)} [initialStateOrInitializer]
* @returns {[T | undefined, import('react').Dispatch<import('react').SetStateAction<T | undefined>>, () => void]}
*/

import {useState, useCallback} from 'react';

export default function useStateWithReset(initialStateOrInitializer) {
// set initialize as state to make sure it always get the latest value when useStateWithReset being called.
const [initializer] = useState(initialStateOrInitializer);
const [value, setValue] = useState(initializer);

const resetValue = useCallback(() => {
setValue(initializer);
}, [initializer]);

return [
value,
setValue,
resetValue
];
}