Free through lesson 3

Vue.js Fundamentals Course

From setting up your environment with Vite to template syntax, ref and reactivity, props and emit, the Composition API, Vue Router, Pinia, forms and validation, TypeScript, and testing. Over 30 lessons, you'll finish and build a ToDo app, wrapping up by clarifying how Vue differs from React so you can judge which to pick yourself. All code and test output was actually run on Vue 3.5.13 and Vitest 3.

Curriculum

The 30 lessons are split into 6 chapters. We recommend working through them in order starting from Chapter 1, but feel free to skip around to whatever interests you. * .vue files (single-file components) can't run in the browser here, so try them in the Vite project you'll set up in Lesson 1. This course assumes the basics from JavaScript.

Chapter 1 — Getting Started with Vue (lessons 1–5)

You'll create a project with Vite and get a handle on template syntax, v-if and events, and ref and reactivity. You'll finish by building a component as a .vue file (a single-file component) and reusing it from a parent.

Chapter 2 — Assembling Components (lessons 6–10)

You'll pass values from parent to child with props, notify a parent from a child with emit, and inject content with slots. Render lists with v-for and key, finishing by tying input to state with v-model.

Chapter 3 — Composition API (lessons 11–16)

You'll round out your Composition API toolkit with reactive, computed, watch, and lifecycle hooks. You'll finish by pulling logic out into a composable, and see for yourself the trap where reactivity breaks.

11

Handling Objects with reactive (vs. ref)

Make a whole object reactive with reactive, writing it without .value. Why it suits something bundled like a form, the trap of reassignment/destructuring breaking the connection, and when to use ref.

🔒 Basic
12

Building Computed Properties with computed

Derive a value from state with computed, recalculating only on dependency change. Stack a subtotal and tax total to confirm it tracks, its caching edge over a method, and never mutate state inside it.

🔒 Basic
13

Watching Changes and Running Side Effects with watch

React to a value's change with watch, receiving old and new values to log. When to use it over computed, how to write immediate, deep, and watchEffect, and why not to reach for watch for everything.

🔒 Basic
14

Lifecycle (onMounted and onUnmounted)

Start work right after mounting to the DOM with onMounted, and clean up with onUnmounted. Confirm the state change and the clearInterval call with a test, and what happens if you forget to clean up.

🔒 Basic
15

Building Your Own Composable (a use~ Function)

Bundle counter logic into a function called useCounter, confirming each call creates independent state. The advantage of testing it without a component, and when to use Pinia instead.

🔒 Basic
16

Reactivity Traps (Destructuring and toRefs)

Why destructuring a reactive object drops it from the Proxy and breaks tracking, and how toRefs keeps the connection. The standard pattern of returning toRefs(state), and destructuring props.

🔒 Basic

Chapter 4 — Routing and State Management (lessons 17–22)

You'll split pages with Vue Router and use dynamic routes and navigation guards. Create a store with Pinia to share state, finishing by handling asynchronous data fetching.

Chapter 5 — Using It for Real Work (lessons 23–27)

You'll get a handle on form modifiers and validation, using it alongside TypeScript, and testing components. You'll finish by building a product list that combines every tool so far.

Chapter 6 — Building and Publishing (lessons 28–30)

You'll finish a ToDo app, build it for production, and publish it. You'll wrap up by clarifying how it differs from React, so you can judge which to pick yourself.

Once you've finished all 30 lessons, move on to TypeScript to guard your components with types. A membership unlocks every course.