Concurrent React 18 / 19
Suspense, useTransition, useDeferredValue, lazy loading and the use() hook.
- Hard~35 min
Concurrent Rendering with useTransition
The UI freezes when filtering a large list because the state update blocks the render. Users can't type in…
- useTransition
Start Challenge - Hard~35 min
Suspense with Error Boundaries
A component using Suspense for data fetching needs proper error handling. When the fetch fails, Suspense…
- Suspense
- Error Boundary
Start Challenge - Hard~35 min
useDeferredValue for Search
A search input with expensive filtering causes the input to lag. Use useDeferredValue to defer the expensive…
- useDeferredValue
Start Challenge - Medium~20 min
Code Splitting with React.lazy
The app bundle is too large. Split the heavy Chart component into a separate chunk that loads only when…
- Suspense
- React.lazy
Start Challenge - Medium~20 min
Code Splitting with React.lazy and Suspense
The app bundles all components together, making the initial load slow. Implement code splitting to load heavy…
- Suspense
- React.lazy
Start Challenge - Hard~35 min
Reading a Promise with React 19's use()
Replace the useEffect + useState data-fetching dance with React 19's use() hook. The promise is created in…
- use()
Start Challenge - Hard~35 min
useTransition for Non-Blocking UI
Switching tabs renders a heavy list and freezes the input. Use useTransition to mark the heavy update as…
- useTransition
Start Challenge - Medium~20 min
Optimistic Guestbook with React 19 useOptimistic
The baseline guestbook is pessimistic and hand-rolled: posting awaits a slow flaky server (~900ms, ~25%…
- useOptimistic
- Forms
Start Challenge - Hard~35 min
Suspense Data Fetching with the React 19 use() Hook
The baseline fetches a quote the pre-React-19 way: useEffect + three status states (data / loading / error)…
- use()
- Suspense
- Data fetching
Start Challenge - Medium~20 min
Responsive Search with useTransition & useDeferredValue
A searchable catalog of 2,400 products where every row is deliberately expensive to render (~0.15ms of busy…
- useTransition
- useDeferredValue
Start Challenge