Skip to content

Course Recap and What's Next

You have built and deployed ZeroBudget — a complete, production-quality React app. Here is everything the course covered and where to go next.

ZeroBudget is a zero-based budgeting app with:

  • Multiple income sources, editable inline
  • 8 preset spending categories with user-editable budget amounts
  • A real-time “Left to Assign” number that goes green at zero and red when over-budgeted
  • Transactions logged per category via quick-add or a global form
  • Per-category spent / remaining / progress bar calculations (all derived state)
  • Month-by-month navigation with copy-from-last-month and reset
  • Full localStorage persistence keyed by month and year

You can view the live app and read the full source.

React is a UI library. Components are functions that return JSX. Vite scaffolds and serves the project. JSX is JavaScript with syntax sugar — className, htmlFor, camelCase events, and expressions in {}.

Components have one responsibility. Props are inputs — data flows one way, from parent to child. Children call callback props to send data back. Composition builds complex UIs from simple pieces. Lists need stable, unique key props.

useState stores data that changes and triggers re-renders on update. Never mutate state — always pass new values. Controlled inputs bind inputs to state. Lift state up to share it between siblings.

Module 04 — Lists, Effects, and Persistence

Section titled “Module 04 — Lists, Effects, and Persistence”

Dynamic lists come from state. useEffect handles side effects with a dependency array. useLocalStorage combines lazy initialization and a write-on-set pattern for persistence. Always include all dependencies; return cleanup functions.

Module 05 — Derived State and Performance

Section titled “Module 05 — Derived State and Performance”

Derive values from existing state instead of storing them. useMemo caches expensive computations. useCallback stabilizes function references. React.memo skips re-renders when props are unchanged. Measure before optimizing.

Custom hooks extract stateful logic into reusable functions. Context broadcasts data without prop drilling. The useBudgetContext pattern — a hook that wraps useContext with a guard — is the clean way to expose context. Use props for identity, context for shared state, local state for UI-only values.

Applied every concept to a complete app: month-keyed persistence, derived totals, inline editing, two transaction paths, month navigation, and a clean separation between the data layer (useBudget), the broadcast layer (BudgetContext), and the layout layer (App).

PatternWhen to use it
Controlled inputsEvery form input that feeds state
Derived stateAny value computable from existing state
Lifted stateWhen siblings need to share the same data
Custom hookWhen stateful logic repeats or clutters a component
ContextWhen data needs to reach deep descendants without threading
useMemo / useCallbackWhen measured performance problems exist in large lists

Vue Foundations →

The JavaScript Development Track continues with Vue Foundations — the next course in the sequence. Vue 3 takes a different approach to reactive SPAs than React: Single-File Components co-locate template, logic, and scoped styles in one .vue file; the Composition API with <script setup> replaces hooks; Vue Router and Pinia ship as official first-party packages. You will build FamilyTree — an interactive family tree SPA with multi-generation relationships, marriage/divorce history, and full localStorage persistence.

If you want to go deeper in React before moving on:

React Router — client-side routing for multi-page React apps. Every production React app uses it.

Data fetching libraries — React Query (TanStack Query) handles loading states, caching, and re-fetching for server data far better than raw useEffect + fetch.

TypeScript with React — Adding TypeScript gives you autocomplete on props, catches mismatched types at compile time, and is standard on professional teams.

Congratulations on completing React Foundations.