useTransition returns [isPending, startTransition] for non-blocking updates: import { useTransition } from 'react'; const [isPending, startTransition] = useTransition(); function handleClick() { startTransition(async () => { const data = await fetchData(); setResults(data); }); }. React 19 supports async callbacks in startTransition (new feature). isPending is true during transition, false after completion. Benefits: keeps UI responsive, urgent updates (typing, clicks) zoom through while non-urgent (filtering, rendering) wait. Use for: search filtering, tab switching, form submissions. Async transitions immediately set isPending=true, make requests, then set isPending=false. Replaces manual loading states. Wrap expensive state updates to prevent UI blocking. Production: combine with Suspense for data fetching, show loading indicators via isPending. Works with concurrent rendering for smooth UX.
React19 Hooks FAQ & Answers
12 expert React19 Hooks answers researched from official documentation. Every answer cites authoritative sources you can verify.
unknown
12 questionsuse() reads promises during render with Suspense integration: import { use, Suspense } from 'react'; function UserProfile({ userPromise }) { const user = use(userPromise); return
useFormStatus provides form submission status (must call in child component): import { useFormStatus } from 'react-dom'; function SubmitButton() { const { pending, data, action, method } = useFormStatus(); return ; }. Parent:
. Properties: pending (boolean, true during submit), data (FormData object or null), action (function reference or null), method ('get' or 'post'). Important: must be called from component insideuseDeferredValue defers expensive renders without fixed delay: import { useDeferredValue, useState } from 'react'; const [query, setQuery] = useState(''); const deferredQuery = useDeferredValue(query); <input onChange={e => setQuery(e.target.value)} />
React 19 allows ref as standard prop - forwardRef deprecated: function MyInput({ ref }) { return ; }. Parent: const ref = useRef();
Use
useTransition returns [isPending, startTransition] for non-blocking updates: import { useTransition } from 'react'; const [isPending, startTransition] = useTransition(); function handleClick() { startTransition(async () => { const data = await fetchData(); setResults(data); }); }. React 19 supports async callbacks in startTransition (new feature). isPending is true during transition, false after completion. Benefits: keeps UI responsive, urgent updates (typing, clicks) zoom through while non-urgent (filtering, rendering) wait. Use for: search filtering, tab switching, form submissions. Async transitions immediately set isPending=true, make requests, then set isPending=false. Replaces manual loading states. Wrap expensive state updates to prevent UI blocking. Production: combine with Suspense for data fetching, show loading indicators via isPending. Works with concurrent rendering for smooth UX.
use() reads promises during render with Suspense integration: import { use, Suspense } from 'react'; function UserProfile({ userPromise }) { const user = use(userPromise); return
useFormStatus provides form submission status (must call in child component): import { useFormStatus } from 'react-dom'; function SubmitButton() { const { pending, data, action, method } = useFormStatus(); return ; }. Parent:
. Properties: pending (boolean, true during submit), data (FormData object or null), action (function reference or null), method ('get' or 'post'). Important: must be called from component insideuseDeferredValue defers expensive renders without fixed delay: import { useDeferredValue, useState } from 'react'; const [query, setQuery] = useState(''); const deferredQuery = useDeferredValue(query); <input onChange={e => setQuery(e.target.value)} />
React 19 allows ref as standard prop - forwardRef deprecated: function MyInput({ ref }) { return ; }. Parent: const ref = useRef();
Use