Базовый хук
usePrevious можно уточнить, добавив выборочное сохранение. Такой хук принимает вторым аргументом предикат-функцию, которая решает, нужно ли обновлять "предыдущее" значение.Внутренний
ref хука изменится только при положительном ответе предиката. Это позволяет отслеживать не последнее значение, а последнее, подошедшее под определенное правило.import { useEffect, useRef } from 'react';
function useConditionalPrevious<T>(
value: T,
predicate: (prev: T, current: T) => boolean
) {
const previousRef = useRef<T>();
const currentRef = useRef<T>(value);
useEffect(() => {
if (predicate(currentRef.current, value)) {
previousRef.current = currentRef.current;
}
currentRef.current = value;
}, [value, predicate]);
return previousRef.current;
}👉 @sWebDev
