Vue 3 - The Complete Guide (incl. Router, Vuex, Composition API)
Learn Vue.js - in its latest version - step by step from the ground up. Learn how to build highly reactive web apps with one of the most popular frameworks!
Start courseNo matter at which metric you look at (Google Trends, Github Stars, Tweets ...) - VueJS is the shooting star in the world of JavaScript frameworks - it simply is amazing!
This course teaches the latest version of Vue (Vue.js 3) from the ground up and in great detail. We'll cover all the core basics but we'll not stop thereafter - this course also dives into advanced concepts like the Composition API introduced with Vue 3.
Frontend frameworks are extremely popular because they give us this reactive, great user experience we know from mobile apps - but now in the browser! No wonder that jobs requiring frontend framework skills like VueJS are amongst the best paid ones in the industry!
You may know Angular 2+ and ReactJS, well, VueJS combines the best of both frameworks and makes building anything from small widgets to big, enterprise-level apps a breeze and a whole lot of fun!
And if you don't know the two mentioned frameworks: That's fine, too, this course does not expect any knowledge of any other frontend framework - you will learn it all throughout this Course!
This course covers it all!
We'll start at the very basics, what Vue.js is and how it works before we move on to more complex and advanced topics but I'll be honest: It's too much to fit it all into one sentence, so here's what you'll learn in this Course:
- What is VueJS and Why would you use it?
- The Basics (including the basic Syntax, Understanding Templates and much more!)
- How to Output Reactive Data & Listen to Events
- Interacting with DOM (Rendering Lists, Conditionally attaching/ detaching Elements ...)
- Setting up a Development Environment and Workflow
- Using Components (and what Components are to begin with)
- A Deep Dive Look Behind the Scenes of Vue
- Binding to Form Inputs
- Sending Http Requests to Backend APIs
- Authentication & Vue
- How to make your App more Beautiful with Animations and Transitions
- How to create an awesome Single-Page-Application (SPA) with Routing
- How to improve State Management by using Vuex
- How to Deploy the App
- And much more ...
All these topics are taught with real examples and demo projects. This course is full of exercises, challenges and bigger courser projects that allow you to practice what you learned.
Along with many other smaller projects, we will build a couple of bigger main projects:
- The "Monster Slayer" Game - a game running in the browser, 100% powered by Vue
- The "Learning Resource Manager" - a web app that allows you to manage (add, delete, list) your favorite learning resources
- The "Find a Coach" app - a web app that allows you to sign up / login, register as a coach, list and filter available coaches and send messages to coaches
Is this course for you?
Now that you know what this course is about, let's see if this course is for you!
Here are three types of students who will love this course:
Student #1:
Has some JavaScript experience and is interested in what this language can do. You heard and read that JavaScript allows you to create nice web applications and enhance existing web pages. VueJS is your choice!
Student #2:
You already have some experience with other frontend frameworks like Angular (2+) or ReactJS. But either due to interest or disappointment of the existing frameworks, you seek some alternatives - VueJS might be what you were looking for!
Student #3:
Has experience with backend frameworks/ languages but now also wants to enter the frontend world. VueJS is an awesome choice here, it's fun, it uses native JS and it's extremely powerful!
Bonus: Student #4
Is disappointed by Angular 2+. Does a good framework need 2 hours of setup? No, certainly not - as VueJS will prove to this student!
Let's dive into VueJS right now!
Course content
Section 1Getting Started
- Welcome to the Course!1:39
- What is "Vue.js"?7:51
- Different Ways of Using Vue2:35
- Exploring Vue Alternatives3:11
- Building A First App With Just JavaScript7:26
- Re-building the App with Vue10:51
- Vue vs "Vanilla JavaScript" (just JavaScript)1:10
- Setting Up the Course Development Environment2:04
- Course Outline & What's In The Course2:58
- How To Get The Most Out Of This Course3:23
- Module ResourcesPremium1:00
Section 2Basics & Core Concepts - DOM Interaction with Vue
- Module IntroductionPremium0:48
- Creating and Connecting Vue App InstancesPremium8:40
- Interpolation and Data BindingPremium3:35
- Binding Attributes with the "v-bind" DirectivePremium5:37
- Understanding "methods" in Vue AppsPremium5:47
- Working with Data inside of a Vue AppPremium3:23
- Outputting Raw HTML Content with v-htmlPremium3:31
- A First SummaryPremium4:12
- Time to Practice: Data Binding - ProblemPremium2:55
- Time to Practice: Data Binding - SolutionPremium11:34
- Understanding Event BindingPremium7:17
- Events & MethodsPremium6:12
- Working with Event ArgumentsPremium2:59
- Using the Native Event ObjectPremium8:59
- Exploring Event ModifiersPremium9:53
- Locking Content with v-oncePremium2:07
- Time to Practice: Event Binding - ProblemPremium1:47
- Time to Practice: Event Binding - SolutionPremium8:54
- Data Binding + Event Binding = Two-Way BindingPremium6:32
- Methods used for Data Binding: How It WorksPremium6:46
- Introducing Computed PropertiesPremium5:58
- Working with WatchersPremium10:49
- Methods vs Computed Properties vs WatchersPremium2:27
- v-bind and v-on ShorthandsPremium1:53
- Time to Practice: Reactivity - ProblemPremium1:57
- Time to Practice: Reactivity - SolutionPremium9:00
- Dynamic Styling with Inline StylesPremium7:19
- Adding CSS Classes DynamicallyPremium6:31
- Classes & Computed PropertiesPremium1:57
- Dynamic Classes: Array SyntaxPremium1:22
- Time to Practice: Dynamic Styling - ProblemPremium2:32
- Time to Practice: Dynamic Styling - SolutionPremium8:24
- Module SummaryPremium4:14
- Module ResourcesPremium1:00
Section 3Rendering Conditional Content & Lists
- Module IntroductionPremium1:35
- Understanding the ProblemPremium3:16
- Rendering Content ConditionallyPremium5:09
- v-if, v-else and v-else-ifPremium4:18
- Using v-show Instead Of v-ifPremium2:25
- Rendering Lists of DataPremium6:20
- Diving Deeper Into v-forPremium5:12
- Removing List ItemsPremium3:59
- Lists & KeysPremium8:26
- Time to Practice: Conditional Content & Lists - ProblemPremium1:09
- Time to Practice: Conditional Content & Lists - SolutionPremium8:48
- Module SummaryPremium2:15
- Module ResourcesPremium1:00
Section 4Course Project: The Monster Slayer Game
- Module IntroductionPremium1:18
- Project Setup & First MethodsPremium12:27
- Updating the Health BarsPremium7:07
- Adding a "Special Attack"Premium6:23
- Adding a "Heal" FunctionalityPremium4:46
- Adding a "Game Over" ScreenPremium9:37
- Finishing the Core FunctionalityPremium6:08
- Adding a Battle LogPremium14:11
- Module ResourcesPremium1:00
Section 5Vue: Behind the Scenes
- Module IntroductionPremium1:31
- An Introduction to Vue's ReactivityPremium4:26
- Vue Reactivity: A Deep DivePremium8:10
- One App vs Multiple AppsPremium3:53
- Understanding TemplatesPremium3:56
- Working with RefsPremium5:21
- How Vue Updates the DOMPremium6:26
- Vue App Lifecycle - TheoryPremium4:46
- Vue App Lifecycle - PracticePremium9:48
- Module ResourcesPremium1:00
Section 6Introducing Components
- Module IntroductionPremium1:30
- Understanding the ProblemPremium8:39
- Introducing ComponentsPremium10:54
- The Why: Building Complex User Interfaces With ComponentsPremium1:00
- Multiple Vue Apps vs Multiple ComponentsPremium1:00
- Module ResourcesPremium1:00
Section 7Moving to a Better Development Setup & Workflow with the Vue CLI
- Module IntroductionPremium1:35
- Why We Need A Development ServerPremium3:29
- Why We Want A Better Developer ExperiencePremium5:50
- Installing & Using the Vue CLIPremium8:26
- Inspecting the Created ProjectPremium5:58
- Inspecting the Vue Code & ".vue" FilesPremium6:04
- Adding the "Vetur" Extension to VS CodePremium1:15
- More on ".vue" FilesPremium1:40
- A New Vue ProjectPremium5:05
- Creating a Basic Vue AppPremium9:32
- Adding a ComponentPremium8:14
- Adding StylingPremium2:16
- A Small AdditionPremium1:00
- Module ResourcesPremium1:00
Section 8Component Communication
- Module IntroductionPremium1:41
- Introducing "Props" (Parent => Child Communication)Premium10:03
- Prop Behavior & Changing PropsPremium6:30
- Validating PropsPremium7:14
- Supported Prop ValuesPremium1:00
- Working with Dynamic Prop ValuesPremium5:37
- Emitting Custom Events (Child => Parent Communication)Premium11:15
- Defining & Validating Custom EventsPremium4:05
- Prop / Event Fallthrough & Binding All PropsPremium1:00
- Demo: Adding Components & Connecting ThemPremium13:15
- Demo: Adding More Component CommunicationPremium6:24
- Time to Practice: Props & Custom Events - ProblemPremium3:13
- Time to Practice: Props & Custom Events - SolutionPremium21:38
- A Potential ProblemPremium6:26
- Provide + Inject To The RescuePremium8:16
- Provide + Inject for Functions / MethodsPremium3:59
- Provide + Inject for Functions / MethodsPremium2:06
- Module SummaryPremium4:44
- Module ResourcesPremium1:00
Section 9Diving Deeper Into Components
- Module IntroductionPremium1:38
- Project SetupPremium2:38
- Global vs Local ComponentsPremium9:21
- Scoped StylesPremium5:15
- Introducing SlotsPremium6:23
- Named SlotsPremium5:35
- Slot Styles & CompilationPremium2:26
- More on SlotsPremium7:19
- Scoped SlotsPremium9:34
- Dynamic ComponentsPremium7:06
- Keeping Dynamic Components AlivePremium2:44
- Applying What We Know & A ProblemPremium9:24
- Teleporting ElementsPremium3:50
- Working with FragmentsPremium1:23
- The Vue Style GuidePremium3:02
- Moving to a Different Folder StructurePremium2:56
- Module SummaryPremium3:38
- Module ResourcesPremium1:00
Section 10Course Project: The Learning Resources App
- Module IntroductionPremium1:37
- Setup & First StepsPremium5:24
- First Components & PropsPremium10:46
- Styling and More ComponentsPremium7:19
- Header & BaseCard ComponentsPremium7:00
- Adding a Base ButtonPremium5:19
- Dynamic Components & Attribute FallthroughPremium8:37
- Adding & Styling TabsPremium4:58
- Adding a FormPremium4:12
- Fetching User InputPremium8:27
- Adding a Modal DialogPremium12:19
- Deleting ItemsPremium6:42
- Adding "Teleport"Premium1:28
- Module ResourcesPremium1:00
Section 11Forms
- Module IntroductionPremium0:33
- v-model & InputsPremium6:03
- Working with v-model Modifiers and NumbersPremium6:54
- v-model and DropdownsPremium2:25
- Using v-model with Checkboxes & RadiobuttonsPremium7:13
- Adding Basic Form ValidationPremium5:13
- Building a Custom Control ComponentPremium6:27
- Using v-model on Custom ComponentsPremium6:48
- Module SummaryPremium1:14
- Module ResourcesPremium1:00
Section 12Sending Http Requests
- Module IntroductionPremium1:08
- Starting App & Why we need a BackendPremium5:04
- Adding a BackendPremium3:21
- How To (Not) Send Http RequestsPremium5:23
- Sending a POST Request to Store DataPremium5:45
- Http Requests & Http Methods (Verbs)Premium1:00
- Getting Data (GET Request) & Transforming Response DataPremium9:51
- Loading Data When a Component MountsPremium2:00
- Showing a "Loading..." MessagePremium2:55
- Handling the "No Data" StatePremium3:00
- Handling Technical / Browser-side ErrorsPremium6:41
- Handling Error ResponsesPremium6:49
- Module SummaryPremium1:31
- Module ResourcesPremium1:00
Section 13Routing: Building "Multi-Page" Single Page Applications
- Module IntroductionPremium0:41
- What & Why?Premium4:39
- Routing SetupPremium4:36
- Registering & Rendering RoutesPremium6:25
- Navigating with router-linkPremium4:55
- Styling Active LinksPremium3:05
- Programmatic NavigationPremium4:01
- Passing Data with Route Params (Dynamic Segments)Premium10:46
- Navigation & Dynamic PathsPremium3:00
- Updating Params Data with WatchersPremium5:30
- Passing Params as PropsPremium3:37
- Redirecting & "Catch All" RoutesPremium7:50
- Using Nested RoutesPremium5:34
- More Fun with Named Routes & Location ObjectsPremium5:21
- Using Query ParamsPremium3:59
- Rendering Multiple Routes with Named Router ViewsPremium5:51
- Controlling Scroll BehaviorPremium6:17
- Introducing Navigation GuardsPremium7:31
- Diving Deeper Into Navigation GuardsPremium6:50
- The Global "afterEach" GuardPremium1:27
- Beyond Entering: Route Leave GuardsPremium7:13
- Utilizing Route MetadataPremium2:14
- Organizing Route FilesPremium4:49
- SummaryPremium2:12
- Module ResourcesPremium1:00
Section 14Animations & Transitions
- Module IntroductionPremium1:11
- Animation Basics & CSS TransitionsPremium7:28
- Understanding CSS AnimationsPremium4:20
- Why Is "Just CSS" Not Enough?Premium4:27
- Playing CSS Animations with Vue's HelpPremium4:45
- Using the Transition ComponentPremium5:02
- CSS Animations with the Transition ComponentPremium2:28
- Using Custom CSS Class NamesPremium3:34
- Example: Animating a ModalPremium8:38
- Transitioning Between Multiple ElementsPremium9:15
- Using Transition EventsPremium8:31
- Building JavaScript Transitions (instead of CSS)Premium14:57
- Disabling CSS TransitionsPremium3:05
- Getting Started with Animated ListsPremium6:44
- Animating Lists with "transition-group"Premium5:26
- Animate List Item MovementPremium3:53
- Animating Route ChangesPremium12:15
- An Important Note on Animated Route ChangesPremium1:00
- Module ResourcesPremium1:00
Section 15Vuex
- Module IntroductionPremium0:59
- What & Why?Premium7:11
- Creating & Using a StorePremium4:43
- Connecting Components to StatePremium2:36
- Introducing Mutations - A Better Way of Changing DataPremium6:30
- Passing Data to Mutations with PayloadsPremium4:07
- Introducing Getters - A Better Way Of Getting DataPremium7:40
- Running Async Code with ActionsPremium7:33
- Understanding the Action "Context"Premium2:02
- Using Mapper HelpersPremium5:57
- Example: Adding More StatePremium8:09
- Organizing your Store with ModulesPremium4:10
- Understanding Local Module StatePremium4:27
- Namespacing ModulesPremium5:03
- Structuring Vuex Code & FilesPremium8:43
- A Challenge!Premium1:51
- Challenge Solution (1/3)Premium12:00
- Challenge Solution (2/3)Premium4:57
- Challenge Solution (3/3)Premium3:18
- SummaryPremium1:19
- Module ResourcesPremium1:00
Section 16Main Project: "Find a Coach" Web App
- Module IntroductionPremium2:35
- Planning the Project / Web AppPremium4:26
- Planning the Data RequirementsPremium5:11
- Planning the Layout / ComponentsPremium5:06
- Registering RoutesPremium5:58
- Adding Route Page ComponentsPremium5:27
- Working on the Main Layout & StylingPremium7:42
- Wiring Up PagesPremium5:22
- Adding Vuex and Coach DataPremium12:15
- Working on the Coaches List and List ItemsPremium11:21
- Adding a Couple of Base Components (Base Card, Base Button, Base Badge)Premium12:53
- Building the Coach Detail ComponentPremium8:24
- Filtering CoachesPremium11:10
- Registering as a Coach: The FormPremium10:13
- Adding Coaches to VuexPremium13:36
- Adding Form ValidationPremium12:35
- Working on the Contact FormPremium8:08
- Storing Requests (Messages) With VuexPremium8:31
- Outputting Incoming Requests (Messages)Premium10:01
- Filtering Requests for the Active CoachPremium4:44
- Sending a PUT Http Request to Store Coach DataPremium11:05
- Fetching Coach Data (GET Http Request)Premium7:51
- Rendering a Loading SpinnerPremium6:38
- Adding Http Error HandlingPremium9:17
- Sending Coaching Requests Http RequestsPremium15:48
- Caching Http Response DataPremium8:28
- Adding Route TransitionsPremium10:19
- The "Not Found" Page & SummaryPremium2:19
- Module ResourcesPremium1:00
Section 17Vue & Authentication
- Module IntroductionPremium1:00
- How Authentication Works in Vue Apps (or any SPA)Premium6:09
- Locking / Protecting Backend ResourcesPremium5:56
- Adding an Authentication Page (Login & Signup)Premium9:54
- Preparing VuexPremium4:22
- Adding a "Signup" Action & FlowPremium9:05
- Better UX: Loading Spinner & Error HandlingPremium5:30
- Adding a "Login" Action & FlowPremium3:15
- Attaching the Token to Outgoing RequestsPremium4:19
- Updating the UI Based on Auth StatePremium4:04
- Adding a "Logout" Action & FlowPremium3:34
- Authentication & Routing (incl. Navigation Guards)Premium11:41
- Adding "Auto Login"Premium8:52
- Adding "Auto Logout"Premium13:34
- SummaryPremium1:19
- Module ResourcesPremium1:00
Section 18Optimizing & Deploying Vue Apps
- Module IntroductionPremium1:10
- What To Deploy?Premium2:50
- Optimization: Using Asynchronous ComponentsPremium12:16
- Building the Project For ProductionPremium3:54
- Deploying a Vue AppPremium8:55
- Module ResourcesPremium1:00
Section 19The Composition API - Replacing the Options API
- Module IntroductionPremium2:00
- Which Problem Does The Composition API Solve?Premium6:51
- Replacing "data" with "refs"Premium11:29
- Building "reactive" ObjectsPremium10:57
- Reactivity: A Deep DivePremium8:23
- Replacing "methods" with Regular FunctionsPremium7:01
- Time to Practice: Data & Functions - ProblemPremium2:39
- Time to Practice: Data & Functions - SolutionPremium14:24
- Replacing "Computed Properties" with the "computed" FunctionPremium7:52
- Two-Way-Binding and the Composition APIPremium2:58
- Working with WatchersPremium5:42
- Time to Practice: Composition API Core Building Blocks - ProblemPremium1:07
- Time to Practice: Composition API Core Building Blocks - SolutionPremium7:00
- A First SummaryPremium1:37
- How To Use Template RefsPremium4:49
- Components, Props & The Composition APIPremium7:57
- Emitting Custom EventsPremium2:33
- Working with Provide/ InjectPremium3:42
- Lifecycle Hooks in the Composition APIPremium5:13
- Migrating from Options API to Composition API - An Example ProjectPremium1:55
- Migrating a First ComponentPremium6:40
- Migrating a Big ComponentPremium12:38
- Migrating the Remaining ComponentsPremium11:56
- Routing, Params & The Composition APIPremium7:27
- The Route & Router Objects and the Composition APIPremium5:08
- Using Vuex with the Composition APIPremium4:33
- SummaryPremium3:09
- Module ResourcesPremium1:00
Section 20Reusing Functionality: Mixins & Custom Composition Functions
- Module IntroductionPremium1:16
- Reusability ConceptsPremium4:54
- Using MixinsPremium4:48
- Understanding Mixin MergingPremium3:11
- Global MixinsPremium2:52
- Disadvantages of MixinsPremium3:28
- Custom Hooks / Composables & The Composition APIPremium8:40
- More Custom Composition FunctionsPremium3:48
- Why Hooks / Composables Beat MixinsPremium1:26
- Example: Creating a "Search" HookPremium11:28
- Custom Hooks GotchasPremium8:43
- More Thoughts on Custom Hooks / ComposablesPremium2:54
- Example: A Custom "Sort" HookPremium5:29
- Module ResourcesPremium1:00
Section 21Roundup & Next Steps
- Course Roundup & Next StepsPremium3:08
Section 22Vue 2 to Vue 3 Migration
- Vue 3 - OverviewPremium6:30
- Important Changes & Migration StepsPremium17:51
- Vue 3: New FeaturesPremium5:27
- The New Composition API (Optional!)Premium23:45
Course instructor
Maximilian Schwarzmüller
As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.
The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.