vue3组件化开发优势劣势分析,及一个案例

Vue 3 组件化开发的优势和劣势

优势

可复用性:

组件可以重复使用,减少代码冗余,提高开发效率。

可以在不同的项目中复用组件,提升开发速度。

可维护性:

组件化开发使得代码结构清晰,易于维护。

每个组件独立,修改一个组件不会影响其他组件。

模块化:

组件化开发符合模块化编程思想,便于团队协作。

每个组件可以独立开发和测试,提高开发效率。

灵活性:

Vue 3 提供了 Composition API 和 script setup 语法,使得逻辑组织和复用更加灵活。

可以根据需求选择 Options API 或 Composition API。

性能优化:

Vue 3 的响应式系统和虚拟 DOM 优化了性能,组件化开发可以更好地利用这些优化。

劣势

学习曲线:

对于新手来说,理解组件化开发和 Vue 3 的新特性(如 Composition API 和 script setup)可能需要一些时间。

复杂性:

在大型项目中,组件数量可能会非常多,管理这些组件和它们之间的通信可能会变得复杂。

过度抽象:

如果过度使用组件化,可能会导致代码过于抽象,增加理解和维护的难度。

案例:使用 script setup 实现一个简单的 TodoList

项目结构

src/
│
├── components/
│   ├── TodoList.vue
│   ├── TodoItem.vue
│   └── AddTodo.vue
│
├── App.vue
└── main.js
1. TodoItem.vue - 单个任务项组件
<template><li><span :class="{ completed: todo.completed }">{{ todo.text }}</span><button @click="toggleComplete">Toggle</button><button @click="deleteTodo">Delete</button></li>
</template><script setup>
const props = defineProps({todo: {type: Object,required: true,},
});const emit = defineEmits(['toggle-complete', 'delete-todo']);const toggleComplete = () => {emit('toggle-complete', props.todo.id);
};const deleteTodo = () => {emit('delete-todo', props.todo.id);
};
</script><style scoped>
li {list-style: none;margin: 10px 0;
}button {margin-left: 10px;
}.completed {text-decoration: line-through;color: gray;
}
</style>
2. TodoList.vue - 任务列表组件
<template><ul><TodoItemv-for="todo in todos":key="todo.id":todo="todo"@toggle-complete="handleToggleComplete"@delete-todo="handleDeleteTodo"/></ul>
</template><script setup>
import TodoItem from './TodoItem.vue';const props = defineProps({todos: {type: Array,required: true,},
});const emit = defineEmits(['toggle-complete', 'delete-todo']);const handleToggleComplete = (todoId) => {emit('toggle-complete', todoId);
};const handleDeleteTodo = (todoId) => {emit('delete-todo', todoId);
};
</script><style scoped>
ul {padding: 0;
}
</style>
3. AddTodo.vue - 添加任务组件
<template><div><input v-model="newTodo" @keyup.enter="addTodo" placeholder="Add a new task" /><button @click="addTodo">Add</button></div>
</template><script setup>
import { ref } from 'vue';const newTodo = ref('');const emit = defineEmits(['add-todo']);const addTodo = () => {if (newTodo.value.trim()) {emit('add-todo', newTodo.value);newTodo.value = '';}
};
</script><style scoped>
input {margin-right: 10px;
}
</style>
4. App.vue - 主组件
<template><div id="app"><h1>Todo List</h1><AddTodo @add-todo="handleAddTodo" /><TodoList :todos="todos" @toggle-complete="handleToggleComplete" @delete-todo="handleDeleteTodo" /></div>
</template><script setup>
import { ref } from 'vue';
import AddTodo from './components/AddTodo.vue';
import TodoList from './components/TodoList.vue';const todos = ref([{ id: 1, text: 'Learn Vue 3', completed: false },{ id: 2, text: 'Build a project', completed: false },
]);const handleAddTodo = (newTodoText) => {todos.value.push({id: todos.value.length + 1,text: newTodoText,completed: false,});
};const handleToggleComplete = (todoId) => {const todo = todos.value.find((t) => t.id === todoId);if (todo) {todo.completed = !todo.completed;}
};const handleDeleteTodo = (todoId) => {todos.value = todos.value.filter((t) => t.id !== todoId);
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>
5. main.js - 入口文件
import { createApp } from 'vue';
import App from './App.vue';createApp(App).mount('#app');
运行项目

在项目根目录下运行以下命令来启动开发服务器:

npm run serve

总结

使用 script setup 语法更简洁地编写 Vue 3 组件,减少样板代码。

组件化开发使得代码结构清晰,易于维护和扩展。

这个案例展示了如何使用 Vue 3 的响应式系统和组件化开发模式构建一个功能完整的 TodoList 应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503037.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

欧科云链研究院:ChatGPT 眼中的 Web3

编辑&#xff5c;OKG Research 转眼间&#xff0c;2024年已经进入尾声&#xff0c;Web3 行业经历了热闹非凡的一年。今年注定也是属于AI的重要一年&#xff0c;OKG Research 决定拉上 ChatGPT 这位“最懂归纳的AI拍档”&#xff0c;尝试把一整年的研究内容浓缩成精华。我们一共…

.NET 9.0 WebApi 发布到 IIS 详细步骤

微软表示&#xff0c;.NET 9 是迄今为止性能最高的 .NET 版本&#xff0c;对运行时、工作负载和语言方面进行了 1,000 多项与性能相关的改进&#xff0c;并采用了更高效的算法来生成更好的代码。 .NET 9 是 .NET 8 的继任者&#xff0c;特别侧重于云原生应用和性能。 作为标准期…

【通识安全】煤气中毒急救的处置

1.煤气中毒的主要症状与体征一氧化碳中毒&#xff0c;其中毒症状一般分为轻、中、重三种。 (1)轻度&#xff1a;仅有头晕、头痛、眼花、心慌、胸闷、恶心等症状。如迅速打开门窗&#xff0c;或将病人移出中毒环境&#xff0c;使之吸入新鲜空气和休息&#xff0c;给些热饮料&am…

ECCV`24 | 首次解决文本到3D NeRFs分解问题!港中文等提出DreamDissector

论文链接&#xff1a;https://arxiv.org/abs/2407.16260 亮点直击 据作者所知&#xff0c;作者是第一个解决文本到3D NeRFs分解问题的团队。 为了解决这个问题&#xff0c;本文引入了一个名为DreamDissector的新颖框架&#xff0c;包括一种新颖的神经类别场&#xff08;NeCF&a…

nginx-灰度发布策略(split_clients)

一. 简述&#xff1a; 基于客户端的灰度发布&#xff08;也称为蓝绿部署或金丝雀发布&#xff09;是一种逐步将新版本的服务或应用暴露给部分用户&#xff0c;以确保在出现问题时可以快速回滚并最小化影响的技术。对于 Nginx&#xff0c;可以通过配置和使用不同的模块来实现基于…

PCL点云库入门——PCL库点云特征之PFH点特征直方图(Point Feature Histograms -PHF)

1、算法原理 PFH点&#xff08;Point Feature Histogram&#xff09;特征直方图的原理涉及利用参数化查询点与邻域点之间的空间差异&#xff0c;并构建一个多维直方图以捕捉点的k邻域几何属性。这个高维超空间为特征表示提供了一个可度量的信息空间&#xff0c;对于点云对应曲面…

qml PathView详解

1、概述 PathView 是 Qt Quick 中一个非常强大的视图组件&#xff0c;它基于一个 Path 来展示视图项&#xff08;如 Item、Rectangle 等&#xff09;。PathView 可以让你按照定义的路径动态地显示多个元素&#xff0c;并且支持动画、滑动等功能。这个视图控件的最大特点是能够…

网络协议安全的攻击手法

1.使用SYN Flood泛洪攻击&#xff1a; SYN Flood(半开放攻击)是最经典的ddos攻击之一&#xff0c;他利用了TCP协议的三次握手机制&#xff0c;攻击者通常利用工具或控制僵尸主机向服务器发送海量的变源端口的TCP SYN报文&#xff0c;服务器响应了这些报文后就会生成大量的半连…

前端学习DAY31(子元素溢出父元素)

.box1{width: 200px;height: 200px;background-color: chocolate;} 子元素是在父元素的内容区中排列的&#xff0c;如果子元素的大小超过了父元素&#xff0c;则子元素会从 父元素中溢出&#xff0c;使用overflow属性设置父元素如何处理溢出的子元素 可选值&#xff1a;visible…

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换&#xff0c;就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…

【前端下拉框】获取国家国旗

一、先看效果 二、代码实现&#xff08;含国旗&#xff09; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

Timer、Ticker使用及其注意事项

Timer、Ticker使用及其注意事项 在刚开始学习golang语言的时候就听说Timer、Ticker的使用要尤其注意&#xff0c;很容易出现问题&#xff0c;这次就来一探究竟。 本文主要脉络&#xff1a; 介绍定时器体系&#xff0c;并介绍常用使用方式和错误使用方式源码解读 timer、tic…

C++11——2:可变模板参数

一.前言 C11引入了可变模板参数&#xff08;variadic template parameters&#xff09;的概念&#xff0c;它允许我们在模板定义中使用可变数量的参数。这样&#xff0c;我们就可以处理任意数量的参数&#xff0c;而不仅限于固定数量的参数。 二.可变模板参数 我们早在C语言…

君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码

目录 1 交叉编译ffmpeg----错误解决过程&#xff0c;不要看 1.1 下载源码 1.2 配置 1.3 编译 安装 1.3.1 报错&#xff1a;libavfilter/libavfilter.so: undefined reference to fminf 1.3.2 报错&#xff1a;error: unknown type name HEVCContext; did you mean HEVCPr…

感知器的那些事

感知器的那些事 历史背景Rosenblatt和Minsky关于感知机的争论弗兰克罗森布拉特简介提出感知器算法Mark I感知机争议与分歧马文明斯基简介单层感知器工作原理训练过程多层感知器工作原理单层感知机 vs 多层感知机感知器模型(Perceptron),是由心理学家Frank Rosenblatt在1957年…

C语言:枚举类型

一、枚举类型的声明 枚举顾名思义就是一一列举。我们可以把可能的取值一一列举。比如我们现实生活中&#xff1a; 星期一到星期日是有限的7天&#xff0c;可以一一列举 &#xff1b;性别有&#xff1a;男、女、保密&#xff0c;也可以一一列举 &#xff1b;月份有12个月&#x…

25/1/6 算法笔记<强化学习> 初玩V-REP

我们安装V-REP之后&#xff0c;使用的是下面Git克隆的项目。 git clone https://github.com/deep-reinforcement-learning_book/Chapter16-Robot-Learning-in-Simulation.git 项目中直接组装好了一个机械臂。 我们先来分析下它的对象树 DefaultCamera:摄像机&#xff0c;用于…

CODESYS MODBUS TCP通信(AM400PLC作为主站通信)

禾川Q1 PLC MODBUS-TCP通信 禾川Q1 PLC MODBUS-TCP通信(CODESYS平台完整配置+代码)-CSDN博客文章浏览阅读17次。MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(MODBUSTCP通信)_将matlab仿真导入plc-CSDN博客文章浏览阅读722次。本文详细介绍了如何使用MATLAB与S7-1200PLC进行…

OSPF - 影响OSPF邻居建立的因素

总结为这么10种 routerID 冲突区域id不一致认证MA网络掩码需一致区域类型(特殊区域)hello、dead时间MTU(如果开启检查)静默接口网络类型不匹配MA网络中路由器接口优先级全为0 如何建立邻居可以查看上一篇文章&#xff0c;可以直接专栏找&#xff08;&#x1f92b;挂链接会没流…

【大数据】(选修)实验4 安装熟悉HBase数据库并实践

实验4 安装熟悉HBase数据库并实践 1、实验目的 (1)理解HBase在Hadoop体系结构中的角色; (2)熟练使用HBase操作常用的Shell命令; (3)熟悉HBase操作常用的Java API。 2、实验平台 操作系统:Linux Hadoop版本:2.6.0或以上版本 HBase版本:1.1.2或以上版本 JDK版…