Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 6x 6x 3x 3x 3x 6x 6x 3x 6x | import { Dispatch, useEffect, useRef, useState } from "react"; /** * This is a version of useState that will detect if the component is * still mounted. This hides the warning that would normally appear * if set state is called when the component is unmounted so it * is advised *NOT* to use this unless there's a specific reason * such as a an Axios interceptor that may be used to change state * when it is unable to refresh an auth token. * @param initialState - initisl state * @returns state, setter * */ export function useStateIfMounted<S>( initialState: S | (() => S) ): [S, Dispatch<S>] { const mountedRef = useRef(false); useEffect(() => { mountedRef.current = true; return function useMountedEffectCleanup() { mountedRef.current = false; }; }, []); const [state, setState] = useState(initialState); function setStateIfMounted(next: S) { if (mountedRef.current) { setState(next); } } return [state, setStateIfMounted]; } |