vue中封装组件注意的点

175 阅读2分钟

一、基础实现

在编写vue组件的时候,需要先了解两个比较基础的点。一,defineProps,二,defineEmits,这两个方法。

defineProps

在自组件中,我们会通过defineProps方法生成一个props对象,在props对象中,我们会定义好在父组件传递过来的变量 例如

//第一步先从vue中引入这两个方法
import { defineProps,defineEmits } from 'vue';
//第二步创建porps对象
const props = defineProps({
  name:{
    type:String,
    required:true
  },
  ...
  
})
//这里的name和父组件绑定的值对应

defineEmits

当我们需要向组件触发一个事件的时候,就需要用到这个方法,

const emits = defineEmits(['event'])
emits('event',数据1,数据2,...)

在项目中的完整写法

父组件

image.png

第一步:将封装好的子组件引入父组件

第二步:在父组件页面上使用子组件

第三步:给子组件绑定其需要的值

第四步:定义触发事件执行的方法

子组件

image.png

第一步:将defineProps,defineEmits从vue中引入子组件

第二步:创建props,并定义需要接受的数据,注意,这里的数据不能进行直接修改,需要保护单向数据流

第三步:创建emits,并定义触发的事件名,当emits一个事件给父组件的时候,参数可以为任意个,包括0个

二、进阶封装

在聊这个问题之前我们需要明白我们是为了什么而去封装组件,第一点,肯定是因为这个效果、页面重复出现,这个时候我们将其封装成一个组件,是不是既能够少写重复的代码,还能提高整个代码通用性,减少重复冗余的代码。经过上面部分的学习,我们只是能够封装出组件,但是这个组件的功能强不强大,通用性高不高,还不能得到保证

注意:

1.子组件不能直接修改父组件传递过来的数据,即Props,如果项目中需要修改,将其拷贝一份,修改拷贝的数据,(点击学习拷贝知识

2.为了提高组件的通用性,我们通常会留一个slot插槽,这样可以解决某一些特殊的部分