在微信小程序端的自定义组件中,只有在 properties 中指定的属性,才能从父组件传入并接收

    1. Component({
    2. properties: {
    3. myProperty: { // 属性名
    4. type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
    5. value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个
    6. observer: function (newVal, oldVal, changedPath) {
    7. // 属性被改变时执行的函数(可选),也可以写成在 methods 段中定义的方法名字符串, 如:'_propertyChange'
    8. // 通常 newVal 就是新设置的数据, oldVal 是旧数据
    9. }
    10. },
    11. myProperty2: String // 简化的定义方式
    12. }
    13. ...
    14. })

    而在 Taro 中,对于在组件代码中使用到的来自 props 的属性,会在编译时被识别并加入到编译后的 properties 中,暂时支持到了以下写法

    1. this.props.property
    2. const { property } = this.props
    3. const property = this.props.property

    但是一千个人心中有一千个哈姆雷特,不同人的代码写法肯定也不尽相同,所以 Taro 的编译肯定不能覆盖到所有的写法,而同时可能会有某一属性没有使用而是直接传递给子组件的情况,这种情况是编译时无论如何也处理不到的,这时候就需要大家在编码时给组件设置 defaultProps 来解决了。
    组件设置的 defaultProps 会在运行时用来弥补编译时处理不到的情况,里面所有的属性都会被设置到 properties 中初始化组件,正确设置 defaultProps 可以避免很多异常的情况的出现。