Vue.js 组件化开发:从入门到进阶

ops/2024/10/21 20:31:01/

Vue.js 组件化开发:从入门到进阶

👋 大家好,今天我们来聊一聊 Vue.js 的 “组件化开发”。目前 Vue 开发已经相对成熟了,相信很多朋友对组件化开发并不陌生。

  1. 如果你对组件化开发已经非常熟悉,看到我的文章,欢迎点个👍 支持一下。
  2. 如果你是刚入门,我强烈建议学习一下哦💪。
  3. 如果你想巩固 Vue 组件化的知识,非常推荐来学习📚。

一、什么是组件化开发?

在进入正题之前,想问大家一个问题:你有没有拼过乐高🧱?如果有的话,你就会知道,每一块乐高积木都可以单独使用,但更妙的是,它们能组合成更大、更复杂的东西🏗️。Vue.js 的 “组件化开发” 就是类似的概念。

1.1 组件是什么?

用最简单的话来说,组件就是一个小的独立功能块🧩。你可以把它理解成一块"小积木",每个组件都有自己的功能,并且可以重复利用🔁。

比如你在开发一个网站🌐,这个网站有很多按钮🔘,而这些按钮长得都差不多、功能也类似,那我们完全可以把它们做成一个 “按钮组件”,然后在需要用到按钮的地方直接调用这个组件,像拼乐高一样把它们组装起来🤹‍♂️。

1.2 为什么要组件化?

有人可能会问:“为啥要这么麻烦😅?直接写 HTML 和 JavaScript 不行吗?” 其实,组件化的好处非常多,比如:

  • 重复利用🔄:写一次,用无数次,节省开发时间⏱️。
  • 代码清晰🧹:把复杂的页面拆分成多个小组件,每个组件只负责自己的事情,让代码更好管理🗂️。
  • 方便维护🔧:如果按钮的样式要改,只需要改一次,所有用到这个组件的地方都会同步更新,省时省力💪。

二、用 Vue.js 来创建一个简单的组件

讲了这么多理论📖,咱们来实际操作一下。Vue.js 里创建组件非常简单,下面就给大家举个例子🌰:

2.1 创建一个简单的按钮组件

我们来写一个最简单的按钮组件吧,叫它 <my-button>。假设我们要实现一个蓝色按钮🔵,上面写着"点击我👆"。

<template><button class="my-button" @click="handleClick">{{ text }}</button>
</template><script>
export default {name: 'MyButton',props: {text: {type: String,default: '点击我'}},methods: {handleClick() {alert('按钮被点击了!🎉');}}
};
</script><style scoped>
.my-button {background-color: blue;color: white;border: none;padding: 10px;border-radius: 5px;cursor: pointer;
}
</style>

2.2 使用这个组件

在创建好 <my-button> 组件之后,我们就可以在别的地方用它了,就像拼乐高一样把它插到合适的地方🧩。

<template><div><my-button text="点我一下"></my-button><my-button text="再点我一下"></my-button></div>
</template><script>
import MyButton from './MyButton.vue';export default {components: {MyButton}
};
</script>

这样,我们就能在页面上看到两个按钮,并且它们是完全独立的,每个按钮点击都会弹出提示框📦。

三、组件间通信:让组件 “聊起来”

当我们的项目越来越复杂,组件也会越来越多,它们之间可能还需要互相交流🗣️,像是"兄弟之间的对话"、"父子之间的对话"👨‍👩‍👧‍👦。

3.1 父组件和子组件

在 Vue.js 中,最常见的就是父组件和子组件之间的通信。父组件可以通过 props 向子组件传递数据📨,而子组件可以通过 事件 向父组件发送消息📤。

3.1.1 父组件传数据给子组件

我们之前的例子里,<my-button> 组件通过 props 接收了一个 text,这就是父组件传数据给子组件的方式📩。

3.1.2 子组件给父组件发消息

如果子组件想告诉父组件一些事情,比如按钮被点击了🔔,我们可以使用 事件

<template><button @click="$emit('button-clicked')">{{ text }}</button>
</template>

在父组件中,我们可以监听这个事件:

<template><div><my-button @button-clicked="handleButtonClick"></my-button></div>
</template><script>
import MyButton from './MyButton.vue';export default {components: {MyButton},methods: {handleButtonClick() {console.log('子组件按钮被点击了!🖱️');}}
};
</script>

这样,父组件就能知道子组件发生了什么事情,并作出相应的反应🔄。

四、组件复用:让代码更简洁

大家有没有注意到,我们在上面的例子中,把按钮做成了一个单独的组件,这样我们就能在项目中多次使用这个按钮,而不用重复写代码📝。

想象一下,如果页面上有十个、二十个按钮,每个按钮都写一遍代码,是不是很麻烦😵?而用组件化开发,只需要写一次,然后在需要的地方直接引用,简单又高效✨。

五、再进一步:组件库和更复杂的组件

当你熟练掌握了基础组件开发后,你可以往更高的层次迈进,比如创建自己的组件库📦,或者使用一些流行的组件库,比如 Element UI、Ant Design Vue 等等。

5.1 组件库是什么?

组件库可以理解为一个装满乐高积木的大盒子📦,里面有各种各样的积木,比如按钮、输入框、表单等等🧱。你可以直接拿来用,快速搭建页面,非常方便🚀。

组件库可以帮助你节省大量时间⏳,特别是在项目时间紧张时,直接从组件库里拿积木,组合成你想要的页面🛠️。

六、总结

组件化开发是 Vue.js 的核心思想之一,让代码更加模块化🗂️、复用性更高🔄、可维护性更强🔧。它就像是拼乐高,每个组件都是一个小积木,通过组合这些积木,我们可以快速搭建出功能丰富、结构清晰的网页🖥️。

提示:在实际的项目开发中,大家要有自己的判断力🧠,多思考业务是否真的需要组件化开发🤔。


http://www.ppmy.cn/ops/127366.html

相关文章

【VUE】v-show 和 v-if 的区别

v-show 始终会保留对应的 HTML 元素&#xff0c;只是在隐藏时通过 CSS 样式控制元素不可见&#xff1b;而 v-if 会根据表达式的值条件地渲染或销毁对应的 HTML 元素。v-show 是基于 CSS 的切换&#xff0c;切换速度相对较快&#xff0c;但对页面的渲染效率影响较大&#xff1b;…

C++ 基于自主实现的红黑树封装Map和Set (上)

C 红黑树-CSDN博客 目录 1.观察代码 2. 修改代码 使用仿函数解决比较的问题 3.迭代器接口封装 4. 总结 1.观察代码 在实现了红黑树之后&#xff0c;我们将红黑树封装进Map和Set中。Map和Set最大的区别就是&#xff1a;前者使用的是pair<k,v> &#xff0c;后者只有一…

OpenCV高级图形用户界面(12)用于更改指定窗口的大小函数resizeWindow()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::resizeWindow() 函数用于更改指定窗口的大小。这使得你可以根据需要调整窗口的宽度和高度。 注释 指定的窗口大小是指图像区域的大小。工具栏…

3种常用的缓存读写策略详解

在详解3种常用的缓存读写之前&#xff0c;我们先要了解什么事缓存读写。 缓存读写是指在使用缓存技术时&#xff0c;对数据进行读取和更新的操作过程。缓存是一种用于提高系统性能和可扩展性的技术&#xff0c;通过减少对慢速存储&#xff08;如数据库&#xff09;的访问次数&…

【微服务】微服务API网关详解:提升系统效率与安全性的关键策略

目录 引言一、什么是API网关&#xff1f;二、API网关的架构三、API网关的优势与劣势分析3.1 API网关的优势3.2 API网关的劣势 四、常见的API网关工具五、实现API网关的最佳实践结论 引言 在微服务架构中&#xff0c;API网关作为客户端与后端服务之间的中介&#xff0c;充当客户…

【MR开发】在Pico设备上接入MRTK3(一)——在Unity工程中导入MRTK3依赖

写在前面的话 在Pico上接入MRTK3&#xff0c;目前已有大佬开源。 https://github.com/Phantomxm2021/PicoMRTK3 也有值得推荐的文章。 MRTK3在PICO4上的使用小结 但由于在MacOS上使用MRTK3&#xff0c;无法通过Mixed Reality Feature Tool工具管理MRTK3安装包。 故记录一下…

LeetCode第101题. 对称二叉树

文章目录 &#x1f60a;1.题目&#x1f609;2.解法 &#x1f60a;1.题目 尝试一下该题 &#x1f609;2.解法 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ bool isSameTree…

HarmonyOS NEXT开发之ArkTS自定义组件学习笔记

在HarmonyOS中&#xff0c;ArkTS提供了创建自定义组件的能力&#xff0c;允许开发者封装和复用UI代码。以下是关于自定义组件的详细介绍&#xff0c;包括创建自定义组件、页面和自定义组件的生命周期、自定义组件的自定义布局、冻结功能&#xff0c;以及代码案例分析。 创建自…