Vue3 Props父子组件传值

文章目录

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


前言

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


一、子组件的准备

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

子组件:


 <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的头像.
Vue3 Props父子组件传值_第1张图片
宽高80px,写着80的头像.
Vue3 Props父子组件传值_第2张图片


二、异步监听

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


总结

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

你可能感兴趣的:(Vue.js,vue.js,javascript)