import equal from "fast-deep-equal"; import { useEffect, useRef, useState } from "react"; type Options = { untilEqual: T; } export function useChangeUntilEqual(variableValue: T, { untilEqual }: Options ): T { const [value, setValue] = useState(variableValue); const untilEqualRef = useRef(untilEqual); const hasBeenEqual = useRef(false); useEffect(() => { if(hasBeenEqual.current) { return; } const isEqual = equal(variableValue, untilEqualRef.current); if(!isEqual){ return setValue(variableValue); } hasBeenEqual.current = true; setValue(variableValue); }, [variableValue]); return value; }