如何使用Vue 3创建可重用的自定义组件

简介: 如何使用Vue 3创建可重用的自定义组件

Vue 3是Vue.js框架的最新版本,它具有许多新功能和改进,其中包括更好的性能和可维护性。Vue 3还提供了一些新的API,其中包括Composition API,它使开发人员能够更轻松地创建可重用的自定义组件。在本文中,我们将探讨如何使用Vue 3的Composition API创建可重用的自定义组件。

第一步是安装Vue 3,可以使用npm或yarn来完成:


npm install vue@next



yarn add vue@next


接下来,创建一个新的Vue实例并将其挂载到DOM元素上:


import { createApp } from 'vue';
import App from './App.vue';
const app = createApp(App);
app.mount('#app');


现在我们可以创建我们的第一个自定义组件。在Vue 3中,我们使用defineComponent函数来定义组件。下面是一个简单的计数器组件:


import { defineComponent, ref } from 'vue';
export default defineComponent({
  name: 'Counter',
  setup() {
    const count = ref(0);
    function increment() {
      count.value++;
    }
    return {
      count,
      increment,
    };
  },
  template: `
    <div>
      <p>Count: {{ count }}</p>
      <button @click="increment">Increment</button>
    </div>
  `,
});


让我们来解释一下这个组件的实现。我们使用defineComponent函数来定义一个名为“Counter”的新组件。在组件的setup函数中,我们使用ref函数创建了一个名为count的响应式状态变量,并定义了一个名为increment的函数来增加计数器的值。最后,我们返回了countincrement,以便在组件的模板中使用。

在模板中,我们使用了插值语法({{ count }})来显示计数器的当前值,并使用@click指令来监听按钮的点击事件并调用increment函数。

现在我们可以在我们的Vue应用程序中使用这个组件。在App.vue文件中,我们可以像下面这样引入和使用计数器组件:


<template>
  <div>
    <h1>Vue 3 Custom Components</h1>
    <Counter />
  </div>
</template>
<script>
import { defineComponent } from 'vue';
import Counter from './Counter.vue';
export default defineComponent({
  components: {
    Counter,
  },
});
</script>


这里我们引入了计数器组件并在模板中使用了它。我们还使用components选项将组件注册为App.vue组件的子组件。

现在我们可以看到我们的计数器组件正常工作了,可以增加和显示计数器的值。使用Vue 3的Composition API,我们可以更轻松地创建可重用的自定义组件,并更好地组织和维护我们的代码。

接下来,我们将深入探讨Composition API的一些更高级功能。首先是使用computed函数创建计算属性。计算属性是根据其他响应式状态变量计算得出的值,当这些状态变量发生变化时,计算属性也会自动更新。下面是一个带有计算属性的新版本的计数器组件:


import { defineComponent, ref, computed } from 'vue';
export default defineComponent({
  name: 'Counter',
  setup() {
    const count = ref(0);
    function increment() {
      count.value++;
    }
    const doubledCount = computed(() => count.value * 2);
    return {
      count,
      doubledCount,
      increment,
    };
  },
  template: `
    <div>
      <p>Count: {{ count }}</p>
      <p>Doubled Count: {{ doubledCount }}</p>
      <button @click="increment">Increment</button>
    </div>
  `,
});


在这个新版本的计数器组件中,我们使用computed函数创建了一个名为doubledCount的计算属性。这个计算属性的值是count的两倍,因此当count变化时,doubledCount也会自动更新。在模板中,我们显示了计数器的当前值和两倍的值。

接下来是使用watch函数来监听响应式状态变量的变化。watch函数接收两个参数:要监听的响应式状态变量和当变量发生变化时要执行的回调函数。下面是一个使用watch函数的新版本的计数器组件:


import { defineComponent, ref, watch } from 'vue';
export default defineComponent({
  name: 'Counter',
  setup() {
    const count = ref(0);
    const doubleCount = ref(0);
    function increment() {
      count.value++;
    }
    watch(count, (newValue, oldValue) => {
      doubleCount.value = newValue * 2;
    });
    return {
      count,
      doubleCount,
      increment,
    };
  },
  template: `
    <div>
      <p>Count: {{ count }}</p>
      <p>Double Count: {{ doubleCount }}</p>
      <button @click="increment">Increment</button>
    </div>
  `,
});


在这个新版本的计数器组件中,我们创建了一个名为doubleCount的响应式状态变量,并使用watch函数监听count的变化。当count变化时,我们执行回调函数将doubleCount更新为count的两倍。在模板中,我们显示了计数器的当前值和两倍的值。

最后,我们将使用provideinject函数来创建可重用的组件。provide函数用于向子组件提供数据,而inject函数用于在父组件中访问提供的数据。下面是一个带有提供和注入数据的新版本的计数器组件:


import { defineComponent, ref, provide, inject } from 'vue';
const CounterSymbol = Symbol();
export
目录
相关文章
|
1天前
|
存储 API
vue3中如何动态自定义创建组件并挂载
vue3中如何动态自定义创建组件并挂载
|
1天前
|
JavaScript
vue 函数化组件
vue 函数化组件
|
6天前
|
JavaScript 调度
Vue3 使用 Event Bus
Vue3 使用 Event Bus
11 1
|
6天前
|
JavaScript
Vue组件传值异步问题--子组件拿到数据较慢
Vue组件传值异步问题--子组件拿到数据较慢
10 0
|
JavaScript
Vue的非父子组件之间传值
全局事件总线 一种组件间通信的方式,适用于任意组件间通信
|
12月前
|
缓存 JavaScript 前端开发
Vue Props、Slot、v-once、非父子组件间的传值....
Vue Props、Slot、v-once、非父子组件间的传值....
72 0
|
JavaScript
Vue中父子组件传值
先在⽗组件中给⼦组件的⾃定义属性绑定⼀个⽗组件的变量
|
JavaScript
vue 组件传值
vue 组件传值
71 0
|
JavaScript
vue父子组件传值
vue父子组件传值
|
JavaScript
vue兄弟组件传值 方便快捷
vue兄弟组件传值 方便快捷