InterviewHubPRO
Section Overview
Q309

Question 309 of 445

Part 9: React Hooks Deep Dive (262 - 316)

69%
React & Modern Frontend (445 Qs)•Part 9: React Hooks Deep Dive (262 - 316)

What is the useTransition hook and how does it differ from useDeferredValue?

The useTransition hook allows you to mark certain state updates as non-urgent transitions, keeping the UI responsive during expensive re-renders. It returns a isPending flag and a startTransition function.

Syntax

js
const [isPending, startTransition] = useTransition();

Example: Tab Switching

jsx
import { useState, useTransition } from 'react';

function TabContainer() {
const [isPending, startTransition] = useTransition();
const [tab, setTab] = useState('home');

function selectTab(nextTab) {
  startTransition(() => {
    setTab(nextTab);
  });
}

return (
  <div>
    <button onClick={() => selectTab('home')}>Home</button>
    <button onClick={() => selectTab('posts')}>Posts (slow)</button>
    <button onClick={() => selectTab('contact')}>Contact</button>
    
    {isPending && <Spinner />}
    
    {tab === 'home' && <HomeTab />}
    {tab === 'posts' && <PostsTab />}  {/* Expensive component */}
    {tab === 'contact' && <ContactTab />}
  </div>
);
}

Differences from useDeferredValue

FeatureuseTransitionuseDeferredValue
ControlsState updates (wraps setState)Values (wraps a value)
Use caseWhen you control the state updateWhen you receive a value from props or other hooks
Returns[isPending, startTransition]Deferred value
Pending stateBuilt-in isPending flagManual comparison needed