A Vue 3 cheat sheet with the most important concepts, reactivity, component system, routing, and more. Updated for the latest version and perfect for both beginners and advanced users.
The ultimate reference for mastering Vue 3.
src/
โโ components/
โโ views/
โโ App.vue
โโ main.js
data() {
return {
count: 0,
message: "Welcome!"
};
},
methods: {
increment() {
this.count++;
}
}
<h1>{{ message }}</h1>
<button @click="increment">+</button>
Directive | Purpose |
---|---|
v-bind / : |
Bind attributes |
v-model |
Two-way binding |
v-if / v-else |
Conditional rendering |
v-show |
Toggle visibility |
v-for |
List rendering |
v-on / @ |
Event handling |
v-slot |
Named/Scoped slot usage |
<input v-model="name" />
<p v-if="name">Hi, {{ name }}!</p>
<ul>
<li v-for="item in list" :key="item.id">{{ item }}</li>
</ul>
created() {},
mounted() {},
updated() {},
unmounted() {}
<button @click="sayHi">Click</button>
<input @keyup.enter="submit" />
computed: {
reversed() {
return this.message.split('').reverse().join('');
}
},
watch: {
count(newVal, oldVal) {
console.log(`Count changed from ${oldVal} to ${newVal}`);
}
}
app.component("Greeting", {
props: ["name"],
template: `<h1>Hello, {{ name }}!</h1>`
});
<Greeting name="Sumangal" />
props: ['modelValue'],
emits: ['update:modelValue']
<input
:value="modelValue"
@input="$emit('update:modelValue', $event.target.value)"
/>
import { ref, computed } from "vue";
export default {
setup() {
const count = ref(0);
const double = computed(() => count.value * 2);
const increment = () => count.value++;
return { count, double, increment };
}
};
npm install vue-router
import { createRouter, createWebHistory } from "vue-router";
import Home from "./views/Home.vue";
import About from "./views/About.vue";
const routes = [
{ path: "/", component: Home },
{ path: "/about", component: About }
];
export default createRouter({
history: createWebHistory(),
routes
});
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
const app = createApp(App);
app.use(router).mount("#app");
npm install pinia
import { defineStore } from "pinia";
export const useCounterStore = defineStore("counter", {
state: () => ({ count: 0 }),
actions: {
increment() {
this.count++;
}
}
});
const counter = useCounterStore();
counter.increment();
<!-- Default -->
<slot></slot>
<!-- Named -->
<slot name="header"></slot>
<!-- Scoped -->
<slot :user="user"></slot>
npm install vitest @vue/test-utils
import { mount } from "@vue/test-utils";
import MyComponent from "@/components/MyComponent.vue";
test("renders", () => {
const wrapper = mount(MyComponent);
expect(wrapper.text()).toContain("Hello");
});
ref()
for primitives, reactive()
for objects<script setup>
syntax in SFCskey
in v-for