Vue3父子组件传值完全指南:ref与reactive的新用法
版权申诉
88 浏览量
更新于2024-08-20
收藏 17KB DOCX 举报
"vue3 父子组件传值详解"
Vue3相较于Vue2在数据响应式和组件通信方面有了显著的变化,主要引入了`ref`和`reactive`概念。在Vue2中,父子组件之间的通信主要依赖于`props`(父传子)和`$emit`(子传父)。然而,在Vue3中,由于`setup`函数的出现,这些机制发生了改变。
在Vue2的示例中,父组件通过`props`将`title`传递给子组件,并监听`getChildren`事件来接收子组件的值:
```html
<!-- 父组件 -->
<template>
<div>
<children :title="title" @getChildren="getChildren"></children>
<div>子组件说:{{ childrenAsk }}</div>
</div>
</template>
<script>
import Children from "./children.vue";
export default {
data() {
return {
title: "我是父组件传过来的值",
childrenAsk: "",
};
},
methods: {
getChildren(val) {
this.childrenAsk = val;
},
},
};
</script>
```
子组件接收`title`并触发`getChildren`事件:
```html
<!-- 子组件 -->
<template>
<div>
<div>父组件传过来的值:{{ title }}</div>
<button @click="askToFather">点击发送给父组件</button>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
},
},
data() {
return {
askMsg: "这是我给父组件说的话",
};
},
methods: {
askToFather() {
this.$emit("getChildren", this.askMsg);
},
},
};
</script>
```
在Vue3中,由于`setup`函数的使用,不再有`this`上下文,因此无法直接访问`$props`和`$emit`。Vue3提供了`props`参数和`context`对象来处理这些问题。`props`参数包含了父组件传递的所有属性,而`context`对象则包含`attrs`、`slots`、`emit`等。
Vue3的父组件传递值到子组件基本保持不变,依然是通过`props`:
```html
<!-- 父组件 -->
<template>
<div>
<ChildComponent :title="title" />
</div>
</template>
<script>
import ChildComponent from "./ChildComponent.vue";
export default {
components: { ChildComponent },
setup() {
const title = ref("我是父组件传过来的值");
return { title };
},
};
</script>
```
子组件接收值并发送事件则需要使用`emit`:
```html
<!-- 子组件 -->
<template>
<div>
<div>父组件传过来的值:{{ title }}</div>
<button @click="askToParent">点击发送给父组件</button>
</div>
</template>
<script>
import { ref, onMounted } from "vue";
export default {
props: {
title: {
type: String,
},
},
setup(props, { emit }) {
const askMsg = ref("这是我给父组件说的话");
const askToParent = () => {
emit("sendToParent", askMsg.value);
};
onMounted(() => {
// 初始化时可以执行一些操作
});
return { askMsg, askToParent };
},
};
</script>
```
在这个例子中,`ref`用于创建响应式的数据,`onMounted`是在组件挂载后执行的钩子函数。子组件通过`emit('sendToParent', value)`来触发自定义事件,父组件通过`v-on`或`@`监听该事件。
总结起来,Vue3中父子组件的通信方式主要有以下几点变化:
1. `props`仍然用于父组件向子组件传递数据,但在`setup`函数中,需要通过`props`参数获取。
2. `this.$emit`被替换为`emit`,它作为`setup`函数的第二个参数`context`的一个属性。
3. 使用`ref`或`reactive`来创建响应式数据。
4. 需要使用`onMounted`等生命周期钩子替代`mounted`,因为Vue3没有`this`对象。
理解这些变化对于顺利迁移至Vue3至关重要,它能帮助开发者更高效地利用Vue3的新特性进行组件通信。
2021-12-30 上传
2023-02-05 上传
2023-05-31 上传
2023-04-13 上传
2023-05-25 上传
2024-01-17 上传
2024-06-14 上传
2023-03-29 上传
2023-03-27 上传
mmoo_python
- 粉丝: 0
- 资源: 1万+
最新资源
- 最优条件下三次B样条小波边缘检测算子研究
- 深入解析:wav文件格式结构
- JIRA系统配置指南:代理与SSL设置
- 入门必备:电阻电容识别全解析
- U盘制作启动盘:详细教程解决无光驱装系统难题
- Eclipse快捷键大全:提升开发效率的必备秘籍
- C++ Primer Plus中文版:深入学习C++编程必备
- Eclipse常用快捷键汇总与操作指南
- JavaScript作用域解析与面向对象基础
- 软通动力Java笔试题解析
- 自定义标签配置与使用指南
- Android Intent深度解析:组件通信与广播机制
- 增强MyEclipse代码提示功能设置教程
- x86下VMware环境中Openwrt编译与LuCI集成指南
- S3C2440A嵌入式终端电源管理系统设计探讨
- Intel DTCP-IP技术在数字家庭中的内容保护