Vue3 Props父子组件传值

本文介绍了在Vue3中如何使用Props进行父子组件的数据传递。首先展示了子组件如何准备接收数据,通过一个头像组件的例子,解释了如何动态设置style属性。接着,说明了父组件如何向子组件传递值,并给出两个不同大小头像的示例。最后,讨论了在遇到异步数据时,如何通过watch监听props来确保数据的正确渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

  • 前言
  • 一、子组件的准备
  • 二、父组件传值
  • 二、异步监听
  • 总结


前言

多用于封装组件时,我们界定好一些不变的属性,再暴露一些支持自定义的属性,这些支持自定义的属性就要通过Props传值,比如支持自定义尺寸就如下例。


一、子组件的准备

我们要先准备好接收数据的那一套东西,这里就用我封装的一个头像组件来举例吧:
本处:style="[xxx, xxx]"这种格式为vue2.6新增,数组内部的元素为computed内的方法名,这样写相当于调用这些方法,而这些方法内返回根据props内相应值计算的产物来规定动态的style属性值。

子组件:

<!--我去掉了一些没用的属性,另外我决定把size值渲染出来,这样会直观一些 -->
 <div class="sy-avatar" :style="[size]">{{data.size}}</div>
import { reactive } from 'vue';
export default {
  props: {
    size: {  //接收父组件传过来的size属性值
      type: [String, Number],  //仅接受String或Number类型的值
      default: "middle",  //如果没传来值, 默认以middle为值
    },
  },
  computed:{
    size() {
      return `height:${this.size}px;width:${this.size}px;`;  //this.size即props接收的size值
      }
    },
    setup(props) {  
      let data = reactive({
        size: props.size
      });
      return {
        data,
      };
    }
  }
}

这样一来computed中计算出的size值将被填入style属性中,并且size数值会被渲染出来.
哎,computed那个要是不太直观就看data吧, 我们直接把props传入setup,然后props.size赋值到data.size, 在插值表达式里渲染data.size出来.


二、父组件传值

父组件这边怎么传, 传什么,依赖于你子组件Props里面开放接收了什么。

父组件:

<template>
  <sy-avatar :size="40"></sy-avatar>
</template>

宽高40px,写着40的头像.
在这里插入图片描述
宽高80px,写着80的头像.
在这里插入图片描述


二、异步监听

Props和你的v-model和data都是可靠且勤奋的, 他们会在渲染时把最新的值拿出去渲染.
但是某些异步操作拿来值的时候props已经把值拿去渲染了(create, mounted这种钩子每个生命周期只执行一次), 这部分异步数据就没赶上末班车, 只显示一个默认值在页面上.
就怎么也渲染不上去了,这时候就要用watch监听props中的这一数据.


总结

快一年前写的东西了,有点过时了,2022-4-28重写了一下。
如果对你有帮助,我很高兴)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值