收藏
回答

不可变immutable数组在Component组件报错问题

问题模块 框架类型 问题类型 终端类型 操作系统 微信版本 基础库版本
框架 小程序 Bug 客户端 iOS 6.6.6 2.0.9

- 当前 Bug 的表现

  1. 组件的数组使用不可变对象immutable的List。在wxml,遍历数组,里面一旦使用组件就直接报错。

  2. 如果是创建immutable的Object类型,传递就不会报错。目前排查到是list的for循环问题





- 预期表现

不应该是报错,正常不可变数据是可以传递到组件里面的。


最后一次编辑于  2018-06-04  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

1 个回答

  • LastLeaf
    LastLeaf
    2018-06-04

    感谢反馈。初步判断是因为 immutable 对象原型中含有可枚举的项目导致的问题。目前组件的属性和 data 的初始数据只可以是普通 js 对象(因为在创建组件实例时需要对这些对象进行深复制)。

    2018-06-04
    赞同
    回复 4
    • A
      A
      2018-06-04

      那请问下这种算不算bug,如果不算bug。那么为什么wxml能自动识别immutable对象,那么既然能识别,就代表是能支持的,既然能支持,那么这个问题应该算是bug吧?(在之前的版本中,并不会报错,但是,是自动转换成可变对象)。

      请问下,官方内部是不是也用了类似immutable的工具类?

      2018-06-04
      回复
    • LastLeaf
      LastLeaf
      2018-06-05

      这个是某些使用场景下会报的问题,场景与具体代码中如何使用自定义组件有关。也就是说,有可能你在 wx:for 的节点下使用了自定义组件节点,就可能报这样的问题。


      基础库从不理解 immutable 或其他无关的第三方库(所以就是转换成可变对象了)。分析具体原因的话,还是在于对象原型中可枚举的项目引发的一些问题。目前也没有使用 immutable 等的工具类。


      这个问题我们会尝试在未来版本中进行兼容。但由于基础库并不理解 immutable 这样的第三方库,所以 immutable 对象还是会被转换成可变对象。

      2018-06-05
      回复
    • A
      A
      2018-06-14

      你们这个问题是个严重bug。

      如果不支持immutalbe。那为什么微信开发者工具上可以正常运行,不会报错?部分真机也可以正常运行。在稍前的版本是自动转成可变对象。

      但是,在最近的版本,发布后的代码就直接报错。

      就因为你们微信开发者工具和真机调试,发布正式环境的差异。导致我们排查问题都非常困难,而且这么久了居然没个合理的解决方案,仅仅只是告诉我不支持immutable。

      如果不支持,那开发工具也应该不支持才对。

      2018-06-14
      回复
    • LastLeaf
      LastLeaf
      2018-06-14

      这里的表现确实不应该跟以前不一样。麻烦给个代码片段我复现一下bug。

      2018-06-14
      回复