useDeferredValue — defer non-urgent updates.
1import { useDeferredValue } from "react";23function SearchResults({ query }) {4 const deferredQuery = useDeferredValue(query);5 const isStale = query !== deferredQuery;6 return (7 <div style={{ opacity: isStale ? 0.5 : 1 }}>8 <Results query={deferredQuery} />9 </div>10 );11}
vs useTransition:
useTransition: wrap state updatesuseDeferredValue: wrap valuesBenefits: Input stays responsive, visual feedback for stale data, no debouncing needed.