Props中default用法及踩坑记录

42 篇文章 1 订阅

props的语法

1、数组语法

props: ['size', 'myMessage'] //不限制数据类型

2、对象语法 (注意事项已在注释中说明)

props: {
    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true,
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100,//基本类型可直接写默认值
      //default: () => 100,  //箭头函数写法
    },
    // 具有默认值的数组写法
    propK: {
      type: Array,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return ["张三"];
      },
      //default: () => ([])  //箭头函数写法
    },
    // 带有默认值的对象
    propE: {
      type: Object,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return { message: "hello" };
      },
      //default: () => ({})  //不能直接返回{},这是function类型的写法
    },
    //带有默认方法function
    propG: {
      type: Function,
      default: () => {}  //function类型的写法
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ["success", "warning", "danger"].indexOf(value) !== -1;
      },
    },
  },

踩坑记录

用data中的变量,为props赋默认值,尝试多种方法都失败。父组件未向子组件传参数arrList的情况下,一直获取不到default的值。

  props:{
        arrList:{
            type:Array,
            default:() => (this.demoArr)
        }},
    data(){
        return{
            demoArr:[
                {title:"This is 01 title",price:"100",img:require('@/assets/example-pic/examplePic01.png')},]}
</div>

原因:prop 会在一个组件实例创建之前进行验证,所以实例的属性 (如 data、computed 等) 在 default 或 validator 函数中是不可用的。

简单的说就是在 props-default里面无法引用到 data的数据,所以修改的时候要把data数据复制到default处。同时也要注意用一个工厂函数去返回数组或者对象

props{
 arrList:{
            type:[Array,Object],
            default:() => ([
                {x=...,y=....}
                {.....}
            ])
      }
  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
默认使用`props`来定义组件的属性,可以通过对象语法或函数形式来设置属性的默认值。引用和提供了不同的属性定义方式的示例。比如,可以使用对象语法来定义基本类型的属性,也可以使用工厂函数来定义对象或数组类型的属性,并为其提供默认值。另外,可以使用自定义验证函数来验证属性的值。引用展示了不同类型属性的默认值设置示例。 在设置默认值时,可以使用函数返回来实现。比如,可以使用`default: () => ({})`来设置一个空对象作为属性的默认值。注意,如果直接返回一个空对象`{}`,则需要使用函数的形式`default() { return {} }`。同样,对于其他类型的属性也可以采用类似的方式进行设置。 关于`props`的默认值使用`this`的问题,需要注意的是,在设置`default`时,不能直接使用`this`关键字。因为在设置`default`时,组件实例还未创建,无法访问到组件实例的属性。如果需要在设置`default`时访问组件实例的属性,可以使用计算属性或方法来实现。 总结起来,`props`的默认值可以通过对象语法或函数形式来设置,可以使用工厂函数来定义对象或数组类型的属性的默认值,不能直接使用`this`关键字。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Propsdefault](https://blog.csdn.net/YoungtiNine/article/details/121367452)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Propsdefault用法记录](https://blog.csdn.net/michiko98/article/details/130090045)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Vueprops的默认值defalut使用this时的问题](https://blog.csdn.net/weixin_45242865/article/details/127766093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值