【前端】prop传值的用法

prop配置项的作用是让组件接收外部传过来的值。
组件标签上传值给vue组件对象

<script>
export default {
  name: 'HelloWorld',
  data(){
    return{      
    }
  },
  props:['name','age']      #简单接收
}
</script>

方式2:利用对象方式设置数据类型进行类型限制

props:{
 name:String,
 age:Number
}

数据类型包含了以下几种:
在这里插入图片描述
方式3:比较完整的带有prop验证方式的写法

props:{
    name:String,
    age:{
      type:Number,
      default:99  //设置默认值,如果他的默认值是数组或者对象必须从一个工厂函数获取
    },
    sex:{
      type:String,
      required:true  //必须填写
    },
    //自定义验证函数
    score:{
      type:Number,
      validator(value){
        return value>=0 && value<=100   //验证函数返回值为true则验证通过
      }
    }
}

props是只读的,如果需要修改可以复制props中的内容到data中一份,然后去修改data中的数据。因为vue底层会检测对props的修改,如果进行了修改,就会发出警告。

<template>
  <div class="hello">
    <h1>学生信息</h1>
    <h2>学生名称:{{name}}</h2>
    <h2>学生年龄:{{myAge+1}}</h2>
    <h2>学生性别:{{sex}}</h2>
    <button @click="myAge++">年龄+1</button>
  </div>
</template>

<script>
export default {
  name: 'HelloWorld',
  data(){
    return{     
      myAge:this.age
    }
  },
  // props:{
  //   name:String,
  //   age:Number
  // }
  props:{
    name:String,
    age:{
      type:Number,
      default:99  //设置默认值,如果他的默认值是数组或者对象必须从一个工厂函数获取
    },
    sex:{
      type:String,
      required:true  //必须填写
    },
    //自定义验证函数
    score:{
      type:Number,
      validator(value){
        return value>=0 && value<=100   //验证函数返回值为true则验证通过
      }
    }
  }
}
</script>

### Vue3 组件间面试题及解答 #### 子组件如何访问父组件的数据? 子组件可以通过 `this.$parent` 访问父组件实例中的数据[^1]。然而,这种做法并不推荐用于常规开发中,因为这会破坏父子组件之间的解耦性。 #### 父组件向子组件递数据的方式有哪些? 父组件可以使用 `props` 向子组件递数据。在子组件内部定义 `props` 来接收这些参数,并可以在模板或其他地方正常使用它们[^2]。 ```javascript // 父组件 <template> <ChildComponent :message="msg"/> </template> <script setup> import { ref } from 'vue'; const msg = ref('Hello, child!'); </script> // 子组件 <script setup> defineProps({ message: String, }); </script> ``` #### 如何实现子组件向父组件发送消息? 子组件能够利用 `$emit` 方法触发自定义事件并携带额外的信息回给父级组件。父组件监听该事件即可接收到相应的通知和数据。 ```html <!-- Child Component --> <button @click="$emit('customEvent', data)">Click me!</button> <!-- Parent Component --> <child-component @custom-event="(data) => handleCustomEvent(data)" /> ``` #### 祖先与后代之间怎样共享状态? 对于跨越多层嵌套的情况,除了逐层透外,还可以借助于全局状态管理工具 Vuex 或者 Composition API 提供的 provide/inject 功能来简化跨层级通信过程[^3]。 #### 兄弟组件间的交互模式是什么样的? 兄弟组件无法直接相互作用;通常的做法是引入共同上级作为中介来进行协调工作。即由其中一个兄弟发出请求至其最近公共祖先处处理后再反馈回去另一个兄弟那里[^4]。 #### 新增特性 `$attrs` 和 `v-bind` 的用途是什么? 从 Vue 2.4 开始支持的新属性 `$attrs` 包含了所有未被 prop 所声明绑定过的 attribute(包括 class/style),而 `v-bind="attrs"` 则允许我们将这部分多余的属性自动应用到指定的目标上。 ```html <!-- GrandParent.vue --> <template> <ParentComp someAttr="value"> <!-- other content --> </ParentComp> </template> <!-- ParentComp.vue --> <template> <ChildComp v-bind="$attrs"></ChildComp> <!-- Pass down all unclaimed attributes --> </template> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值