Vue笔记-组件Component-组件通信之单向数据流和props数据验证

1、 单向数据流

 父->子
  • props接受普通数据类型时:父组件数据影响子组件,子组件的数据改变不会影响父组件
  • ​props接受对象或数组这种引用数据类型:子组件直接改变props接受值,是会改变父组件里面的数据的,因为传递过来的时引用的地址而不是单纯的拷贝

注意在 JavaScript 中对象和数组是通过引用传入的,所以对于一个数组或对象类型的 prop 来说,在子组件中改变变更这个对象或数组本身将会影响到父组件的状态。

  • 子级直接修改父级传过来的引用地址是不被允许的(直接赋值)

  • 修改某一项数据是可行的,但不建议这么做

 <script>
        Vue.component('MyComA', {
            // 通过props接收数据a
            props: ['chidren'],
            template: `
            <div>
                父子通信---{{ chidren }}
                <p><button @click='fn'>点击改变</button></p>
            </div>`,
            methods: {
                fn() {
                    // 子级直接修改父级传过来的引用地址是不被允许的(直接赋值)
                    // this.chidren = 3; 
                    // 修改某一项数据是可行的,但不建议这么做
                    this.chidren[0] = 100;
                    console.log(this.chidren)
                }
            }
        })
        new Vue({
            el: '#app',
            // 传递数据a:
            data: {
                // parent: {
                //     a: 'MyComA'
                // }
                parent: [1, 2, 3, 4]
            }
        })
    </script>

2、props数据验证

  • 类型验证type type:[Number,String]/Sting
  • 必填required required:true
  • 默认值default default:data 如果设置的默认值时引用类型(数组或者对象)那么data要是函数的返回值

官方代码:

Vue.component('my-component', {
  props: {
    // 基础的类型检查 (`null` 和 `undefined` 会通过任何类型验证)
    propA: Number,
    // 多个可能的类型
    propB: [String, Number],
    // 必填的字符串
    propC: {
      type: String,
      required: true
    },
    // 带有默认值的数字
    propD: {
      type: Number,
      default: 100
    },
    // 带有默认值的对象
    propE: {
      type: Object,
      // 对象或数组默认值必须从一个工厂函数获取
      default: function () {
        return { message: 'hello' }
      }
    },
    // 自定义验证函数
    propF: {
      validator: function (value) {
        // 这个值必须匹配下列字符串中的一个
        return ['success', 'warning', 'danger'].indexOf(value) !== -1
      }
    }
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值