MediumConcurrent React📖 Theory Question

What are useTransition and useDeferredValue?

💡

Hint

Mark state updates as non-urgent so React can keep the UI responsive — show stale content while new content loads

Full Answer

Both allow non-urgent updates to be deferred so urgent updates (typing, clicking) stay responsive.

useTransition — marks a state update as a transition:

function SearchPage() {
  const [query, setQuery] = useState('');
  const [results, setResults] = useState([]);
  const [isPending, startTransition] = useTransition();

  function handleChange(e) {
    setQuery(e.target.value); // urgent — update input immediately

    startTransition(() => {
      // non-urgent — can be interrupted if user keeps typing
      setResults(expensiveFilter(e.target.value));
    });
  }

  return (
    <>
      
      {isPending ?  : }
    
  );
}

useDeferredValue — defer a value you receive (useful when you don't own the state setter):

function SearchResults({ query }) {
  const deferredQuery = useDeferredValue(query); // lags behind query
  const results = expensiveFilter(deferredQuery); // uses stale value during typing
  const isStale = query !== deferredQuery;

  return (
    
{results.map(r => )}
); }
💡 useTransition is for when you own the state update. useDeferredValue is for when you receive a value as a prop. Both achieve the same goal — responsive typing + deferred expensive render.

Practice this in a timed sprint →

5 free questions, no signup required

⚡ Start Sprint