vue的组件
在Vue里面,默认的都是组件,路由导航加载的是组件,组件里面注册的也是组件,组件还能嵌套组件,虽然很便捷,但是稍微有点混乱。
于是Vue3的项目设置了两个文件夹,一个是 views 可以放页面,或者说是视图,另一个是 components 可以放组件。
虽然名称和用途不同,但是存放的都是 .vue文件,内容结构也是完全一样的。
一开始我还以为 views 里面的组件不需要设置props呢,后来学习了router之后,发现我错了,因为路由里面也可以设置组件的参数。
那么问题来了,如果区分?我们要做一个组件,放在哪里合适?
页面
页面是直接和URL对应,或者说是和“大”URL对应的,里面不做具体的功能,而是放各种组件,负责组件之间的关联关系。
比如
- 首页;
- 商品列表页
- 商品详细页面
等。
这只是举个简单的例子,这样有一个感觉的认识,其实我也说不太清楚,但是又需要这么一个区分,否则总是感觉哪里不对的样子。
组件
负责实现具体的功能,比如:
- 导航组件,负责各种连接,
- 产品列表的组件,负责显示产品目录、分页和查询之类的功能。
- 产品详细组件,负责显示产品的具体内容、购物车按钮等。
当然一个项目里面可以有各种各样的组件,上面只是举个具体点的例子,并不是定义。
控件
更具体的实现专一的功能,比如
- el-input,实现文本类数据的输入;
- el-input-number,实现数字的输入;
- el-select,实现下拉类的选择。
这里只是举了几个UI提供的控件,或者叫做组件。因为在vue里面似乎没有明确的区分,而UI库一般又以插件的形式被注册到项目里面的。
自己封装的组件
那么问题来了,我们把UI拿过来封装一下,做成一个组件,算是哪一种呢?
这个,好像哪种都不算,或者说是介于UI库与组件之间的一种“中间件”。
UI库是针对功能来做,不考虑具体的项目,侧重于UI部分,就是要做的漂亮。数据绑定交给Vue,实现业务功能,那就是调用者的事情,UI库并不怎么关心。
而我们封装的组件呢,就要侧重一下业务逻辑、业务需求,针对某一种、某一类的业务需求,封装一个组件,以实现一定的功能需求。
如果UI库最求的是灵活的话,那么封装组件最求的就是更简单好用,可以牺牲一些灵活性。
自己封装的组件的致命缺点
其实这种方式由来已久,但是为啥总是不受待见的感觉呢?因为有一个致命缺点。
如果封装的组件不能满足需求的话,怎么办?
因为整个项目都是基于这种封装组件来实现的,如果能够满足需求那自然是好,但是如果不能满足新的某一个需求的话,那么怎么办?
因为封装、因为不够灵活,导致无法实现新的需求,这时候就会发现 —— 项目崩了。
不是项目无法运行,而是如果要让项目实现新的需求,那么以前封装的组件就不能用了,要换掉。
但是项目时间紧迫,哪有换组件的时间?
另外,就算能换组件,那么以前做的工作是不是都白费了?
被坑过的肯定有同感。
没被坑过的,大概是不知道我在说啥的。
所以如何处理这个问题,就是一个不能忽略的重点。