收藏
回答

自定义组件属性的值能否不强制转换类型?

早前小程序的自定义组件的 properties,如果父级传入了 undefined,组件内取到的值就是 undefined。

而现在默认会做类型转换:String 收到空字符串,Number 收到 0,Boolean 收到 false,Object 收到 null,Array 收到空数组。造成很多时候 properties 的默认值形同虚设,需要另外做默认值兜底的工作。

请问有没有什么办法关掉这个类型转换呢?

回答关注问题邀请回答
收藏

4 个回答

  • FlashFact
    FlashFact
    2021-05-26

    确实,现在的属性转换,让默认值形同虚设,辣鸡一样的开发体验

    2021-05-26
    有用 1
    回复
  • 海洪晨冰
    海洪晨冰
    2022-01-28

    对象属性,undefined都会类型转化,都需要我在ready里设置默认值。

    2022-01-28
    有用
    回复
  • Lynch Bel
    Lynch Bel
    2021-09-06

    举个例子,原本我有一个进步器 `stepper` 组件,它有个 `max` 属性可以控制最大值的范围,如果我不传这个值的时候,最大值就是999,否则就用传入的值作为最大值。

    我只需要写

    Component(
        properties: {
            max: {
                type: Number,
                value999
            }
        }
    )
    


    这样设置就可以了。

    但是现在强制类型转换,导致我传入 `undefined` 时,会被默认转换成 `0`,导致默认值 `999` 被无视了?!我现在要想在 `max` 为 `undefined` 时默认值为 `999` 就只能这样写:

    <stepper
        max="{{ goods.min_unit_buy_limit.max !== undefined ? goods.min_unit_buy_limit.max : 999 }}"
    />
    


    如果我这个计步器多处使用的话,没处都要这么写才行。

    我这里只是简单举一个例子,实际开发中这种情况非常普遍,写法上太过冗余。麻烦是其次,最大的问题是我现在已有项目中有非常非常多的组件受到这个改动的影响,实际影响范围难以估计,问题排查难度非常大。

    我肯定还有人能想到比我这个更好的解法,但我觉得,如果这里强制类型转换了,那默认值是真的毫无用处了。






    2021-09-06
    有用
    回复
  • 耿霄
    耿霄
    2021-03-16

    贴个代码片段看看 https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2021-03-16
    有用
    回复 4
    • ym
      ym
      2021-03-16
      https://developers.weixin.qq.com/s/Xz98rQmd74oD  控制台打印了收到的属性值
      2021-03-16
      回复
    • 耿霄
      耿霄
      2021-03-16回复ym
      我看看
      2021-03-16
      回复
    • 耿霄
      耿霄
      2021-03-16回复耿霄
      https://developers.weixin.qq.com/s/LF9SQQm97WoM
      1.我觉得你理解偏了,你以为 myModel 未定义,这样  b={ myModel.b }} 的形式就理解为 undefined,当你在自定义组件是 observer 获取 pre 和 next 时,pre 不是为 undefined,
      要了解具体怎么转换,需要看模板引擎。



      2.从另外角度看看,为啥不去适应现有规则,总想着去改变它呢
      2021-03-16
      回复
    • Lynch Bel
      Lynch Bel
      2021-09-06回复耿霄
      因为太多的现有代码受到波及了你懂吗?维护也要成本的!
      2021-09-06
      回复
登录 后发表内容
问题标签