The useDeferredValue() hook helps React applications stay responsive by delaying updates to non-urgent UI parts. It is especially useful when rendering large lists or expensive components based on fast-changing inputs.
// useDeferredValue creates a deferred version of a value
const deferredValue = useDeferredValue(value);
value → original rapidly changing valuedeferredValue → delayed value used for renderingThis example demonstrates how typing remains smooth while a large list renders in the background.
// Demonstrates deferred rendering for large lists
import React, { useState, useDeferredValue } from "react";
function List({ input }) {
const deferredInput = useDeferredValue(input);
const items = Array(3000)
.fill("Item")
.map((x, i) => <li key={i}>{deferredInput} - {i}</li>);
return <ul>{items}</ul>;
}
export default function DeferredExample() {
const [text, setText] = useState("");
return (
<div>
<input
value={text}
onChange={(e) => setText(e.target.value)}
placeholder="Type something..."
/>
<List input={text} />
</div>
);
}
Try typing quickly in the box below. Notice that the Input updates instantly (urgent), while the List updates slightly later (deferred). We are rendering 5,000 items to simulate a heavy workload.
Loading React Demo...
As the user types, the input updates instantly while the list updates slightly later. This prevents the UI from freezing during expensive renders.
Think of typing as a priority lane. The input field stays fast, while the heavy list rendering waits briefly. This separation keeps the application responsive.
useMemo() for best performanceuseDeferredValue()Goal: Experience how deferred rendering keeps UIs smooth under load.