Define Component Vue 3

Posted on  by admin

Vue 3 has made some slight changes to how Vue components work. The basic syntax for creating Vue components hasn't changed much, but there's a lotof new features for you to take advantage of.

Here's an overview of how components have changedin Vue 3. If you drop Vue 3 into an existing Vue 2 codebase, odds are the first error you'll see is TypeError: Vue is not a constructor. That's because the Vue global is now no longer a class. Instead of usingnew Vue() to create a new app, you should use Vue.createApp().

And, instead of registeringcomponents globally using Vue.component(), you register components on apps using app.component(). For example, below is a component in Vue 2:. Below is how you would rewrite it for Vue 3:. There are 4 necessary changes:. Use createApp() instead of new Vue().

Vue 3 Router by Example

Use app.component() instead of Vue.component(). Switch the order of definition, so you define the app before the component. Use mount() instead of $mount(). The basics still work: you still define props the same way, and you can still $emit() eventsfrom your component.

The only difference is that you now need to explicitly define what events yourcomponent emits like how you explicitly define a list of props. Below is an example of how you can use $emit() with Vue 2:. Below is how you would change the above example to work with Vue 3. Besides the usual createApp()and app.component() changes, this example also adds a list of events the component emits.

The Composition API is one of the most touted improvements in Vue 3. And the Composition API starts with the setup() function, which is similar to the created() hook, but much more powerful.


For example, you can use the Vue global's onMounted() function to add a new mounted() hook to your component from the setup() function:. The most interesting part of the composition API is that it lets you define Vue components without explicitly instantiating a component using a syntax reminiscent of React hooks. For example, you can rewrite the above hello component using just the setup() function:. Not only can you define hooks in setup(), you can also return a render() function and effectively define your template in the setup() function as well as shown above.

The neat part of the Composition API is that you don't have to use it. It's just another tool in theVue utility belt.

Step 3 — Creating a Vue 3 Component

For example, we generally don't recommend using JSX-like render() functions becausewe prefer plain old HTML templates for portability and versatility. But, in certain cases,this pattern can be very useful, like if you're migrating a legacy React app to Vue.

PropsOrPropOptions = {},
D = {},
M extends MethodOptions = MethodOptions,
Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
EE extends string = string,
Props = Readonly>,
Defaults = ExtractDefaultPropTypes

Vue School has some of our favorite Vue video courses. Their Vue.js Master Class walks you through building a real world application, and does a great job of teaching you how to integrate Vue with Firebase. Modified5 months ago. I'm trying to build an application on Laravel 8.38 - InertiaJS 0.8.4 I'm using Vue 3 as my frontend stack.

  1. I've multiple layouts which I need to register globally as Vue Component, so that I can use it in my application anywhere.
  2. I'm unable to do so, my code:.
  3. And inside the page I'm trying to call this layout component:.
  4. Unable to fetch, no errors in console.
  5. Rubal GulatiRubal Gulati.

I was having 2 layouts for backend(admin-panel) and frontend(website), achieved as follows. Using inertia default middleware file.


66 gold badges5353 silver badges5959 bronze badges. 5959 bronze badges. In Inertia JS, importing components globally is the same as using a normal Vue configuration. In your app.js file, you need to import the component(either inline or at the top of the file), then add the component before mounting the vue instance.

You can either do this as a mixin, or as a component. So, in your case, the configuration should look like the below:. Then, in your template, you can use the component like this:. I noticed in your original post you are trying to use the component as app-market-layout.

You must import the component with that name if you plan to do that. The configuration would look like this in app.js:. Then in your template:. Christopher WrayChristopher Wray.

Vue.js 3 is the latest version of Vue which was re-written from scratch with TypeScript by the Vue team.


Vue 3 is available for use in production at the current time so you can use the new version to learn about its new features.


Now that Vue 3 is released, developers need to upgrade from Vue 2 as it provides many new features that are super handy when building readable and maintainable components, and better ways to structure Vue applications. We’ll be taking a look at some of these features in this tutorial.

// overload 3: object format with array props declaration
props: ['postTitle'],

At the end of this tutorial, you will understand:. The provide / inject pair and how to use it. Teleport and how to use it. Fragments and how to start using them. The changes made to the Global Vue API and the introduction of the createApp method.

overload 4: object format withobject props declaration
props: {
likes: Number

The changes made to the Events API and the removal of $on, $off, and $once. You no longer can use $refs to access DOM elements.

name: ‘some name’

Vue 3 component props. We'll also show you how to develop apps using the current version of Vue 3, we'll particularly focus on the new features including components and props. You'll see how you can pass data from a parent component down to a deeply nested child component using the provide / inject pair.

Step 3 — Creating a Vue 3 Component for Shopping List

We'll also look at how we can reposition and transfer components from one point in our app to another using Teleport and how to use the multi-root node component. Finally, we learn about the changes made to the Events API and Global API including createApp, $on, $off, and $once.

Throughout this tutorial sections, you will learn how to use Vue 3 and the Composition API to build your web application examples.

name: 'TypescriptExamples',
name: {
required: true
id: [Number, String],
callback: {
type: Object as PropType,
type: null// metadata is typed as any
bookA: {
// Make sure to use arrow functions
title: 'Arrow Function Expression'
validator: (book: Book) => !!book.title
bookB: {
// Or provide an explicit this parameter
validator(this: void, book: Book) {
const result ='') // correct, 'name' is typed as a string
const yearsplit = year.value.split('')// => Property 'split' does not exist on type 'number'
const stringNumberYear = ref('2020') // year's type: Ref
stringNumberYear.value = 2020 // ok!
const openModal = () => {
const book = reactive({ title: 'Vue 3 Guide'})
const book1: Book = reactive({ title: 'Vue 3 Guide'})
const book2 = reactive({ title: 'Vue 3 Guide'}) as Book
const handleChange = (evt: Event) => {
console.log(( as HTMLInputElement).value)
book, book1, book2,
emits: {
// perform runtime validation
methods: {
this.$emit('addBook', {
// bookName: 123 // Type error!
// this.$emit('non-declared-event') // Type error!

More Vue Tutorials

We'll also learn about the ref() function and how to create reactive state using the reactive() function in Vue 3, which can be used to define reactive variables, and then we'll learn about the setup() method introduced as a part of the Composition API added in Vue 3 as an alternative to the Options API.

If you have already used Vue 2 $refs and wonder how to use $refs inside the new setup() method. You'll learn how to use the new ref() function as an alternative for static and dynamic HTML element references.

The Composition API allows you to write and organize components in a Vue 3 application following a reactive approach.

The Vue Composition API will help you to build a more scalable application.

const wrapper1 = mount(Grid, {
dataItems: [{
Product: 'toy'
const wrapper1 = mount(Grid, {
dataItems: [{
Product: 'toy'
Product: 'car'

We’ll be learning how to create a shopping list application with Vue 3 and the Vue Composition API.

In this section, we'll see a summary of the new features coming with Vue 3. Vue 3 is the new version of Vue.js that was re-written from scratch using TypeScript.

The setup() Hook

Evan You, the creator of Vue, announced it back in 2018 at Vue.js London. According to Evan You, Vue 3 will be faster, smaller, more maintainable, and easier to target native development.

In more details, these are some of the new features of Vue 3:. Class-based components and ES2015 classes,.

Fragments, which allow you to have components with multiple root nodes,.