Step 2 of 2 · your path
React, Intermediate
You know the hooks. Now learn the machinery underneath: refs, context, routing, memoisation, and the fetching patterns that don't race themselves.
Your progress
0 / 22 done
Up next
useRef
3 min read · 4 exercises
The order I'd read them in
About 1 h 35 min of reading. Tick off what you've read, it is remembered on this device.
- useRefA box that survives renders and does not cause them.
- Context APIA way to skip the middle layers — not a state manager, and not free.
- useReducerWhen the next state depends on the current state and on which thing happened.
- Custom hooksSharing stateful logic between components — not sharing the state itself.
- Effects in depthStale closures, the dependency array as a contract, and the effects that should not exist.
- State architectureMost React problems are state in the wrong place, in the wrong shape, or duplicated.
2 exercises
- Memoisationmemo, useMemo and useCallback are a cache — and a cache you did not measure is a cost.
- Error boundaries, portals & keys in depthContaining a crash, escaping the DOM tree, and using keys on purpose.
- Data fetching patternsEvery bug in hand-rolled fetching is one of five, and they are all solved problems.
- Auth in ReactProtected routes, token refresh, and the redirect that sends people back where they were.
2 exercises
- Forms at scaleWhere hand-rolled state stops paying, and what a form library actually buys you.
2 exercises
- Server state with TanStack QueryTreat API data as a cache you do not own, and most of your state problems disappear.
- Testing ReactTest what a user can do. A test that breaks on a refactor was protecting the wrong thing.
2 exercises
- TypeScript with ReactProps are a function's parameters, so typing a component is typing a function.
2 exercises
- Animation and transitionsCSS first, a library when you need interruption, and the one case React makes hard.
2 exercises
- End-to-end testingThe tests that run the real app in a real browser — and why you want few of them.
1 exercise
- InternationalisationTranslating strings is the easy third. Plurals, formats and layout direction are the rest.
2 exercises
- File uploadsA file input works without any of your code. Progress, drag and drop and large files are what you add.
2 exercises
- Real-time UIPolling, Server-Sent Events or a WebSocket: choose the smallest thing that works, then handle the connection dropping.
2 exercises
- shadcn/uiNot a component library you install, but components whose source you copy into your project and own.
2 exercises
Practice at this level
Every exercise opens in the editor with tests you can run.
- useReducer · 11 tests
- useReducer · 9 tests
- Custom hooks · 10 tests
- Custom hooks · 10 tests
- Memoisation · 11 tests
- Memoisation · 8 tests
- Context · 9 tests
- Context · 10 tests
- State architecture · 9 tests
- State architecture · 9 tests
- Routing · 8 tests
- State libraries · 8 tests
- TypeScript · 11 tests
- useRef · 9 tests
- TanStack Query · 8 tests
- Data fetching · 8 tests
- Forms at scale · 8 tests
- Auth · 8 tests
- i18n · 8 tests
- File uploads · 8 tests
- Real-time UI · 8 tests
- shadcn/ui · 8 tests
- Animation · 8 tests
- Boundaries & portals · 8 tests
- Effects in depth · 8 tests
- Testing · 9 tests
- E2E testing · 8 tests
- shadcn/ui · 8 tests
- Context · 6 tests
- Context · 5 tests
- Memoisation · 5 tests
- Boundaries & portals · 5 tests
- Data fetching · 5 tests
- useRef · 4 tests
- useReducer · 6 tests
- TypeScript · 5 tests
- State libraries · 5 tests
- i18n · 5 tests
- Animation · 5 tests
- Auth · 5 tests
- Real-time UI · 5 tests
- Effects in depth · 6 tests
- TanStack Query · 4 tests
- Testing · 6 tests
- File uploads · 6 tests
- Effects in depth · 8 tests
- Effects in depth · 7 tests
- useRef · 8 tests
- Data fetching · 10 tests
- Custom hooks · 8 tests
- Custom hooks · 8 tests
- useRef · 8 tests
- Data fetching · 9 tests
- Custom hooks · 8 tests
- Custom hooks · 9 tests
- Context · 9 tests
- useReducer · 10 tests
- Memoisation · 8 tests
- Boundaries & portals · 10 tests
- Boundaries & portals · 10 tests
- Data fetching · 9 tests
- TanStack Query · 9 tests
- TanStack Query · 8 tests
- Forms at scale · 9 tests