重新思考 Vue 组件的定义
重新总结组件的定义
这是官方对组件的定义:组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构。

对于 Vue 开发经验不多的我来说,起初我只是简单的把一个组件当作一个页面,也并没有把页面中太多的可以独立划分的地方写成组件。所以,我之前很多时候都是违背了 Vue 对组件的定义。
在学习了 Android 开发之后,我逐渐开始对 Vue 组件有了一些思考。Android 开发里面对视图进行了划分和定义,对于简单的 UI 界面就称之为 Views —— 视图。视图当中有许多业务,这些业务也不一定都是互相关联的,所以就划分一个 Fragment。当视图中存在列表的时候,又可以划分一个 Adapters。
因此,我在后续开发 Vue 的时候,就按照 Android 那样去划分组件。组件本身就可以是 Views,页面中确实有许多业务不存在互相关联的地方,可以再单独抽离出来作为一个组件。对于列表渲染,可以不像 Android 那样写一个 Adapters,但是列表里面也是有业务的地方,需要抽离出来作为一个组件。因此,在我的意识中,只要视图当中有业务的地方,就把它抽离成组件。

更加细化组件的好处
- 把一些业务抽离进组件中,可以避免变量声明冲突,变量命名难;
- 组件里的变量,与外边的其他组件互不干扰,可以拥有自己的空间(作用域);
- 可以把业务与其他业务进行隔离,避免与其他业务代码混淆;
- 符合 Vue 官方文档对组件的定义;
- 便于维护代码,便于与团队其他成员进行交流。
细化组件的例子
就如我现在正在开发的项目,在做评论这块时,评论是一个列表渲染,但在做回复评论、编辑评论功能时,我把业务进行了抽离(回复评论组件、编辑评论组件、删除评论组件等)。

每一个列表下的回复评论组件里面存储的编辑内容的变量是互不干扰的,所以,可以做到临时存储各自的评论内容的功能,我编辑上一个评论的内容,不会影响下一个评论的内容输入。它们互相隔开,拥有各自的作用域,也正是如此,代码写起来也非常的简单。
细化组件的总结
一个业务就抽离一个组件,虽然做起来很麻烦,但实际上在之后的工作当中非常的有益。这样做,业务之间互相被隔离开,拥有自己的作用域,在遇到变量通信问题时,可以通过 Vuex/Pinia 来解决,又或者用 Emits 来向父组件传输新数据。
重新思考 Vue 组件的定义的更多相关文章
- vue教程3-03 vue组件,定义全局、局部组件,配合模板,动态组件
vue教程3-03 vue组件,定义全局.局部组件,配合模板,动态组件 一.定义一个组件 定义一个组件: 1. 全局组件 var Aaa=Vue.extend({ template:'<h3&g ...
- Vue组件的定义、注册和调用
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>组 ...
- vue 组件的定义
1.什么是组件? 组件的出现,就是为了拆分vue实例的代码量的,能够让我们以不同的组件来划分不同的功能模块,将来我们需要什么样的功能,就可以去调用对应的组件即可. 2.组件化和模块化的不同? 模块化: ...
- Vue组件的定义方式
1.使用template标签定义组件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- vue学习—组件的定义注册
组件的定义注册 效果: 方法一: <div id="box"> <v-header></v-header> <hr /> <b ...
- Vue.js 2.x:组件的定义和注册(详细的图文教程)
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 什么是组件 组件: 组件的出现,就是为了拆分Vue实例的代码量的, ...
- vue里在自定义的组件上定义的事件
事件分为原生事件和自定义事件. vue里在自定义的组件上定义的事件,都被认为是自定义事件,必须用$emit()来触发. 这也是子组件向父传值的原理. 如果想作为原生事件,需要在原生事件后面加上.nat ...
- Vue 数组封装和组件data定义为函数一些猜测
数组封装 var vm={ list:[0,1] } var push=vm.list.push;//把数组原来的方法存起来 vm.list.push=function(arg){//重新定义数组的 ...
- vue.2.0-自定义全局组件
App.vue <template> <div id="app"> <h3>welcome vue-loading</h3> < ...
- java+springBoot+Thymeleaf+vue分页组件的定义
导读 本篇着重介绍java开发环境下,如何写一个vue分页组件,使用到的技术点有java.springBoot.Thymeleaf等: 分页效果图 名称为vuepagerbasic的分页组件,只包含上 ...
随机推荐
- Training: WWW-Robots
原题链接:http://www.wechall.net/challenge/training/www/robots/index.php 打开网页他给我们说什么 说什么这是一个小挑战,你将会了解到机器人 ...
- ubuntu 18.04安装tensorflow (CPU)
在已经安装anaconda环境及pip之后. 添加并设置pip配置文件: mkdir ~/.pip vim ~/.pip/pip.conf pip.conf文件内容: [global] index-u ...
- C#调用WPS转换文档到PDF的的实现代码。
1.WPS安装,最好用这个版本别的版本不清楚,安装Pro Plus2016版本. https://ep.wps.cn/product/wps-office-download.html 2.添加相关的引 ...
- mongorestore target dump invalid CreateFile dump The system cannot find
问题 使用 mongorestore 指定 dump 文件夹,恢复数据报错. mongorestore target 'dump' invalid: CreateFile dump: The syst ...
- 目标检测模型的评价标准-AP与mAP
目录 目录 目录 前言 一,精确率.召回率与F1 1.1,准确率 1.2,精确率.召回率 1.3,F1 分数 1.4,PR 曲线 1.4.1,如何理解 P-R 曲线 1.5,ROC 曲线与 AUC 面 ...
- SpringCloud Alibaba(七) - JWT(JSON Web Token)
原文链接: JWT详解:https://blog.csdn.net/weixin_45070175/article/details/118559272 1.什么是JWT 通俗地说,JWT的本质就是一个 ...
- python中的数学函数
- 开发一个最简单的iOS App
开发一个最简单的iOS App 大家好,我是孜孜不倦学习的Zhangbeihai. 上月底我组织了[组队学习]TensorFlow 入门课程(中文) ,截至目前有300多同学加入.主要就是 Tenso ...
- 单例模式及pickle序列化模块
内容回顾 目录 内容回顾 单列模式实现的多种方式 pickle序列化模块 根据类名或对象名如何获取到类的字符串名 选课系统需求分析 功能提炼 选课系统架构设计 选课系统目录搭建 单列模式实现的多种方式 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(37)-掌握Fiddler中Fiddler Script用法,你会有多牛逼-下篇
1.简介 Fiddler是一款强大的HTTP抓包工具,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有 ...