Context and Reducers
Pass data deep without drilling props, avoid context re-render traps, move state logic into reducers, and combine both into a small app-wide store.
So far, data has moved through your app one way: down through props. That works well until a value is needed ten levels deep and every component in between must carry it. This phase starts with that problem, prop drilling, and the first fix most people skip: composition with children. Then it introduces context, React's way to make a value available to a whole part of the tree without passing it by hand, including the React 19 <Context value> provider and the older .Provider you'll meet in existing code.
Context is easy to start and easy to misuse. You'll watch, with render logs, how every component that reads a context renders again when its value changes, and fix it by memoising the value and splitting one context into two. You'll also learn when not to use context at all.
The second half moves state logic into one place with useReducer: a pure function that takes the current state and an action and returns the next state. You'll compare it honestly with useState, test reducers as plain functions, use Immer inside a reducer, and finish by combining a reducer with two contexts (state and dispatch) and custom hooks into a small app-wide store. That's the pattern behind Redux and many real apps, and the bridge to Phase 15.
Practise this phase
Hands-on exercises: write the code, see your page live, and press Check to have it tested automatically.