如何使用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
目录
相关文章
|
2月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
143 64
|
10天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
39 3
|
2月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
39 8
|
2月前
|
存储 JavaScript 数据管理
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
33 1
|
2月前
|
JavaScript
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
42 1
|
4天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
41 1
|
15天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
46 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
32 1
|
2月前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
39 1
vue学习第四章

热门文章

最新文章