Vue.js 3.0 Tutorial
Vue.js 3.0 Component Advanced
Vue.js 3.0 Transitions & Animations
Vue.js 3.0 Reusable & Combinable
Vue.js 3.0 Advanced
Vue.js 3.0 Tools
Vue.js 3.0 Scale
Vue.js 3.0 Accessibility
Vue.js 3.0 Migrating from Vue2
Vue.js 3.0 Contribute Documentation
Vue.js 3.0 API References
Vue.js 3.0 Style Guide
The Composition API is a new addition in Vue 3.0 that allows developers to use a more flexible function-based approach to creating and organizing component logic.
This tutorial will cover creating a simple counter component using the Composition API.
Step 1: Initialize your Vue project.
You can create a new Vue 3 project using the Vue CLI.
vue create my-project
Select Vue 3 when asked which version of Vue to use.
Step 2: Go to your App.vue
file (or whichever component you'd like to create your counter in).
You can then create a simple counter component using the Composition API like this:
<template> <button @click="increment">{{ count }}</button> </template> <script> import { ref } from 'vue'; export default { setup() { const count = ref(0); const increment = () => { count.value++; }; return { count, increment }; } }; </script>
In the setup()
method, we're declaring our reactive data and functions. Here, we use ref()
to create a reactive reference for our count variable. Then we define an increment()
function to increase the value of count
.
Finally, we return the count
variable and increment
function from the setup()
method so they can be used in our template.
Step 3: Run your application.
You can run your Vue 3 application with the following command:
npm run serve
After starting your application, you should see a button that increments its number each time it's clicked. This is a basic example of using the Composition API in Vue 3.0.
The Composition API offers a more flexible way to compose your component's logic, especially for more complex components. The key advantage here is the ability to abstract and reuse pieces of logic across different components.
Vue 3.0 Reactive Function in Composition API:
reactive
function in the Composition API is used to create a reactive object, making its properties reactive.<script> import { reactive } from 'vue'; export default { setup() { const user = reactive({ name: 'John Doe', age: 25, }); return { user, }; }, }; </script>
Computed Properties in Vue 3.0 Composition API:
computed
function in the Composition API, allowing for reactive data derived from other reactive data.<script> import { reactive, computed } from 'vue'; export default { setup() { const user = reactive({ firstName: 'John', lastName: 'Doe', }); const fullName = computed(() => `${user.firstName} ${user.lastName}`); return { user, fullName, }; }, }; </script>
Lifecycle Hooks in Vue 3.0 Composition API:
onXXX
functions like onMounted
, onUpdated
, and onUnmounted
.<script> import { onMounted, onUnmounted } from 'vue'; export default { setup() { onMounted(() => { console.log('Component is mounted'); }); onUnmounted(() => { console.log('Component is unmounted'); }); }, }; </script>
Refs and Reactive References in Vue 3.0:
ref
function is used to create reactive references, allowing primitive values and objects to be reactive.<script> import { ref } from 'vue'; export default { setup() { const count = ref(0); return { count, }; }, }; </script>
Vue 3.0 watchEffect in Composition API:
watchEffect
is used for reactive side effects in the Composition API, reacting to changes in reactive data.<script> import { ref, watchEffect } from 'vue'; export default { setup() { const count = ref(0); watchEffect(() => { console.log(`Count is: ${count.value}`); }); return { count, }; }, }; </script>
Using Vue 3.0 provide and inject in Composition API:
provide
and inject
functions facilitate component communication and state sharing in the Composition API.<script> import { provide, inject, ref } from 'vue'; const key = Symbol(); const useSharedCounter = () => { const counter = ref(0); provide(key, counter); return counter; }; export default { setup() { const counter = useSharedCounter(); return { counter, }; }, }; </script> <script> import { inject } from 'vue'; const key = Symbol(); export default { setup() { const counter = inject(key); return { counter, }; }, }; </script>
Vue 3.0 Composition API and Reusability:
<script> import { ref } from 'vue'; const useCounter = () => { const count = ref(0); const increment = () => { count.value++; }; return { count, increment, }; }; export default { setup() { const { count, increment } = useCounter(); return { count, increment, }; }, }; </script>
Vue 3.0 Composition API and TypeScript:
<script lang="ts"> import { ref } from 'vue'; interface User { name: string; age: number; } export default { setup(): { user: User } { const user = ref<User>({ name: 'John Doe', age: 25, }); return { user, }; }, }; </script>
Vue 3.0 Composition API with Vuex:
<script> import { useStore } from 'vuex'; export default { setup() { const store = useStore(); const increment = () => { store.commit('increment'); }; return { increment, }; }, }; </script>