hardFrontend

What is `useDeferredValue` and how does it differ from debouncing?

913 views
01

Understand the problem

Compare adaptive deferral with fixed-time debounce/throttle.

reactconcurrentperformance
02

Attempt it yourself

Sketch your approach before reading the solution — that's what interviews test.

Stuck? AI Nudge Available

Get a conceptual hint to guide your logic without spoiling the final implementation.

03

Study the solution

The solution is waiting

Give it an honest attempt first — then compare your thinking with the full walkthrough.

04

Explore the playground snippets

Deferred value driving an expensive list
Run Playground
import { useState, useDeferredValue, useMemo } from 'react';

function SlowList({ text }) {
  const items = useMemo(() => {
    const out = [];
    for (let i = 0; i < 3000; i++) out.push(text + ' #' + i);
    return out;
  }, [text]);
  return <ul style={{ maxHeight: 160, overflow: 'auto' }}>{items.slice(0, 40).map((x) => <li key={x}>{x}</li>)}</ul>;
}

export default function App() {
  const [text, setText] = useState('a');
  const deferred = useDeferredValue(text);
  const stale = text !== deferred;
  return (
    <div style={{ fontFamily: 'sans-serif', padding: 24 }}>
      <input value={text} onChange={(e) => setText(e.target.value)} placeholder="Type fast" />
      <span style={{ opacity: stale ? 1 : 0, marginLeft: 8, color: '#888' }}>rendering…</span>
      <SlowList text={deferred} />
    </div>
  );
}
05

Join the discussion

Discussion (0)

Sign in to join the discussion.

No responses yet. Be the first to share what you think.