Vue3父子组件传值完全指南:ref与reactive的新用法
版权申诉
28 浏览量
更新于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的新特性进行组件通信。
224 浏览量
1724 浏览量
2216 浏览量
2021-12-30 上传
484 浏览量
144 浏览量
1724 浏览量
mmoo_python
- 粉丝: 7582
- 资源: 1万+
最新资源
- ISO+IEC+7816
- Definitive ANTLR Reference
- 开放源代码的计算机视觉类库OpenCv的应用
- Ubuntu全面详解.pdf
- 网上情侣商品专卖项目规划书.doc
- Linux 设备驱动 Edition3
- VC++程序设计期未复习提纲(整理版)
- 网络管理与控制技术网络管理与控制技术
- 网络视频点播系统论文
- 诺基亚N72手机设置
- 《C++6.0mfc编程实例》
- 诺基亚N72操作指南与应用
- Windows系统中如何高效运用组策略
- Tomcat+JSP经典配置实例
- 好书 《Ajax实战》(Ajax in action中文版) word版
- Oracle常用傻瓜问题1000问.txt