超详细vue3选项式父子组件传值

一、问题背景

最近遇到了一个情景:

子组件干完事情,需要对父组件的变量进行更新,因为父组件将该变量传递给子组件,但是不会双向绑定,这时候我们就需要传值或者触发回调去解决这个问题

我们将分为两个部分

1.父组件传值给子组件

2.子组件传值给父组件

来进行讲解

二、父组件传值给子组件

注意,本文中间部分只给部分代码,完整代码在文末!!!

2.1父组件传值给子组件示例

复制代码
<ChildrenConponent @callBack="callBackFun" :datas="parentValue"></ChildrenConponent>

我们在父组件引入该子组件,然后随便定义一个要传入的变量,使用冒号:打头,后面紧跟需要传递的实际值变量

2.2子组件接收父组件传值

复制代码
const props = defineProps( ["datas"]);
values.value = props.datas;

只需要引入defineProps解析传值列表然后取出对应属性即可

三、子组件传值给父组件

3.1子组件传值给父组件示例

首先看父组件

复制代码
<ChildrenConponent @callBack="callBackFun" :datas="parentValue"></ChildrenConponent>

在使用冒号传入给子组件的值的同时,使用@callBack告诉子组件他可以调用一个名为callBack的回调,该回调后面紧跟一个声明在父组件的触发方法callBackFun

3.2父组件截取子组件调用回调示例

然后是子组件

复制代码
const emit = defineEmits(['callBack']);
emit('callBack', childValue.value);

首先导入defineEmits获取回调列表获取一个函数

然后使用回调函数传值个父组件即可(注意保持参数列表一致)

四、全部代码

4.1父组件

复制代码
<template>
    <div>
        你好!!!,我是父组件,我拿到了值:({{ values }})
    </div>
    <ChildrenConponent @callBack="callBackFun" :datas="parentValue"></ChildrenConponent>
</template>

<script setup>
import { ref } from 'vue'
import { ChildrenConponent } from './index'

const parentValue = ref("给儿子的值")
const values = ref("")
const callBackFun = (e) => {
    console.log("打印e", e)
    values.value = e;
    console.log("回调执行")
}
</script>

<style scoped>

</style>

4.2子组件

复制代码
<template>
  <div>
    我是子组件,父组件给了我({{ values }})
    <button type="text" @click="tickCallBack">我是按钮</button>
  </div>
</template>

<script setup>
import { ref, defineProps, defineEmits, onMounted } from 'vue';

const props = defineProps( ["datas"]);
const emit = defineEmits(['callBack']);
const values = ref("");
const childValue = ref("给父亲的值");

const tickCallBack = () => {
  emit('callBack', childValue.value);
  console.log("传值给父组件");
};
onMounted(()=> {
    values.value = props.datas;
})
</script>

五、效果演示

相关推荐
迷路爸爸1801 分钟前
无sudo权限远程连接Ubuntu服务器安装TeX Live实操记录(适配VS Code+LaTeX Workshop,含路径选择与卸载方案)
java·服务器·ubuntu·latex
子春一11 分钟前
Flutter for OpenHarmony:构建一个智能长度单位转换器,深入解析 Flutter 中的多字段联动、输入同步与工程化表单设计
开发语言·javascript·flutter
有梦想的攻城狮14 分钟前
maven中的os-maven-plugin插件的使用
java·maven·maven插件·os-maven-plugin·classifer
2601_9496130214 分钟前
flutter_for_openharmony家庭药箱管理app实战+用药提醒列表实现
服务器·前端·flutter
利刃大大15 分钟前
【Vue】scoped作用 && 父子组件通信 && props && emit
前端·javascript·vue.js
Carry灭霸20 分钟前
【BUG】Redisson Connection refused 127.0.0.1
java·redis
-凌凌漆-23 分钟前
【Vue】Vue3 vite build 之后空白
前端·javascript·vue.js
心柠23 分钟前
前端工程化
前端
消失的旧时光-194325 分钟前
第九课实战版:异常与日志体系 —— 后端稳定性的第一道防线
java·后端
钦拆大仁26 分钟前
Java设计模式-状态模式
java·设计模式·状态模式