Vue3封装知识点(一)组件之间的传值

Vue3封装知识点(一)组件之间的传值

用了很久一段时间Vue3+Ts了,工作中对一些常用的组件也进行了一些封装,这里对封装的一些方法进行一些简单的总结。

1.props传递

首先在主组件进行定义传值

xml 复制代码
<template>
    <div>
        这里是主组件
        <common :first="first"></common>
    </div>
</template>
​
<script setup lang="ts">
import common from './common.vue';
import {ref} from 'vue'
const first=ref('传入通用组件的值')

代码中common是定义的要封装的组件,这里first即是要传入的值

然后子组件要进行接收传来的值,如下

xml 复制代码
<template>
    <div>
    这里是通用组件
    {{ props.first }}
    </div>
</template>
​
<script setup lang="ts">
​
const props=defineProps({
    first:String
})
</script>

这里与vue2不同的是需要利用defineProps进行参数的接收,我这里用到了TS,所以也加入了类型声明。

2.监听参数变化

在一些业务中,父组件传给子组件的数据有时候是动态的,这个时候就需要对参数的改变进行识别了

这里就用到watch了

javascript 复制代码
watch(
  props,
  (newVal) => {
    console.log(props,'props改变了');
  },
  {
    immediate: true,
  }
);

对props进行监听,如果进行改变,然后怎么进行操作,可以更细节的处理了。

这里watch的使用可以参考官网cn.vuejs.org/api/reactiv...

3.触发事件

子向父亲传递信息,或者使用父亲的方法应该怎么做呢,这是就是用到emits了

首先父组件对子组件绑定方法

xml 复制代码
<template>
    <div>
        这里是主组件
        <common :first="first" @getValue="getValue"></common> //这里的@就是绑定的方法
    </div>
</template>
​
<script setup lang="ts">
import common from './common.vue';
import {ref} from 'vue'
const first=ref('传入通用组件的值')
const getValue=(val:string)=>{ //注意这里的参数即是子组件想要传的值
    console.log(val);
}
</script>

绑定后需要在子组件进行接收

xml 复制代码
<template>
    <div>
    这里是通用组件
    {{ props.first }}
    </div>
</template>
​
<script setup lang="ts">
​
const props=defineProps({
    first:String
})
const emits=defineEmits(['getValue'])//这里进行定义接收
watch(
  props,
  (newVal) => {
    console.log(props,'props改变了');
    emits('getValue','我触发了') //想要触发时进行调用
  },
  {
    immediate: true,
  }
);
</script>

这里在子组件定义接收后,再触发时用emits('方法名',传递参数)的形式进行触发,而这个传递参数是你在父组件绑定方法中所定义的参数。

4.调用子组件方法

在封装中,也会遇到一些调用子组件的方法,我现在常用的是下面这种

先用defineExpose将方法进行暴露

kotlin 复制代码
const out=(val:string)=>{
    console.log('我是子组件的方法',val);
}
defineExpose({
    out,
});

然后在父组件使用ref绑定子组件,获取其方法

xml 复制代码
<template>
    <div>
        这里是主组件
        <common :first="first" @getValue="getValue" ref="Common"></common>
    </div>
</template>
​
<script setup lang="ts">
import common from './common.vue';
import {ref,onMounted} from 'vue'
const first=ref('传入通用组件的值')
const getValue=(val:string)=>{
    console.log(val);
}
const Common=ref() //这里ref名称与上面绑定的ref要保持一致
onMounted(() => {
    Common.value.out('传给你')
    // 结果为 '我是子组件的方法 传给你'
});
</script>

这里就是先用ref绑定,然后利用其调用方法,括号内的参数即在子组件定义参数。

5.插槽

插槽方法可以见我以前总结的内容,这里不再详细讲解(原文在csdn)

blog.csdn.net/qq_49907632...

6.总结

上述内容其实就是对常用的组件传值进行的一个总结,真实内容封装其实还是要看组件的具体需求,但是都可能是对这些传值进行的一个应用,后续如果对封装有进一步了解,会进一步补充,敬请期待。。。

其他更新

Vue3封装技巧(二)v-model的应用

Vue3封装知识点(三)依赖注入:project和inject详细介绍

相关推荐
Live0000030 分钟前
在鸿蒙中使用 Repeat 渲染嵌套列表,修改内层列表的一个元素,页面不会更新
前端·javascript·react native
柳杉31 分钟前
使用Ai从零开发智慧水利态势感知大屏(开源)
前端·javascript·数据可视化
兆子龙41 分钟前
从高阶函数到 Hooks:React 如何减轻开发者的心智负担(含 Demo + ahooks 推荐)
前端
狗胜1 小时前
测试文章 - API抓取
前端
三小河1 小时前
VS Code 集成 claude-code 教程:告别海外限制,无缝对接国内大模型
前端·程序员
jerrywus1 小时前
前端老哥的救命稻草:用 Obsidian 搞定 Claude Code 的「金鱼记忆」
前端·agent·claude
球球pick小樱花1 小时前
游戏官网前端工具库:海内外案例解析
前端·javascript·css
用户60572374873081 小时前
AI 编码助手的规范驱动开发 - OpenSpec 初探
前端·后端·程序员
狗胜1 小时前
AI观察日记 2026-03-02|CLAUDE、TYPE、APPFUNCTIONS:掘金热门里的下一步信号
前端