重新思考 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的分页组件,只包含上 ...
随机推荐
- DHorse系列文章之maven打包
插件打包 这种方式是平时最常用的,首先要下载并安装maven环境,然后在被打包的项目中引入插件,有各种各样的打包插件,比如springboot自带插件: <plugin> <grou ...
- golang面向对象
一.方法 1.方法是作用在指定的数据类型上,和指定的数据类型绑定,因此自定义类型都可以有方法,而不仅仅是struct: 2.方法的申明和格式调用: package main import ( &quo ...
- Leetcode 799.香槟塔:动态规划+递归
香槟塔:动态规划+递归 题目来源:Leetcode 22/11/20每日一题:799.香槟塔 https://leetcode.cn/problems/champagne-tower 我们把玻璃杯摆成 ...
- layui的switch监听事件无用
像layui的这种表单事件是属于表单,而不是表格,所以操作是layui.form.on监听事件,而不是用layui.table.on table = layui.table , form = layu ...
- Android Studio打开时报错if you already hava 64-bit JDK installed,define a JAVA_HOME
出现这个问题不知道改了什么导致的,卸载了重新安装也是不行. 以及到高级设置中进行配置jdk也是无效, 解决方法为需要在路径 C:\Users\你自己的用户名\AppData\Roaming\Googl ...
- tp6 requset获取参数的方式
第一种:获取全部参数的值 request()->param() 1 第二种:获取排除某些字段的值,即获取其他值 request()->except(['serverToken','logi ...
- 手动安装Mysql数据库,适合重装系统和绿色安装。
依次输入命令: d:cd D:\MySQL Server 5.6\bin 根据自己的目录设置 mysqld --install mysql4001 --defaults-file="D:\m ...
- pagehelper踩坑记之分页乱套
我们在使用数据库进行查询时,很多时候会用到分页展示功能,因此除了像mybatis这样的完善的orm框架之外,还有pagehelper这样的插件帮助减轻我们的工作. pagehelper的实现方式是,不 ...
- JavaScript入门①-基础知识筑基
01.JavaScript基础知识 JavaScript(缩写:JS)是一种具有面向对象能力的.解释型的程序语言,基于对象和事件驱动,具有相对安全性的客户端脚本语言.JavaScript是一门完备的 ...
- 1.4 Apache Hadoop完全分布式集群搭建-hadoop-最全最完整的保姆级的java大数据学习资料
目录 1.4 Apache Hadoop 完全分布式集群搭建 1.4.1 虚拟机环境准备 1.4.2 集群规划 1.4.3 安装Hadoop 1.4.3.1 集群配置 1.4.3.1.1 HDFS集群 ...