收藏
回答

简易双向绑定,如果属性是数组会导致栈溢出?

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 微信iOS客户端 8.0.37 2.30

写了一个图片选择器组件<images>,定义了数组类型的list属性,父组件中用了双向绑定:

<images model:list="{{selectedImages}}" />


子组件内只要调用 this.setData({list:[]}) 就会报错:Maximum call stack size exceeded

https://developers.weixin.qq.com/miniprogram/dev/framework/view/two-way-bindings.html

看文档中并没有限制双向绑定属性的数据类型,所以是底层的bug吗?

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

3 个回答

  • 陈冠仲
    陈冠仲
    07-14

    我也遇到了,type: String没问题,type: Array和type: Object都有问题,单步调试发现业务逻辑是没有递归/死循环的,就是小程序底层一直在调用setData,但调试器看不到底层源码,麻烦官方看看吧。

    Component({
      properties:{
        value:{type:Object,value:{v: 0}}
      },
      methods:{
        setValue(){
          this.setData({value: {v: 1}}); // 栈溢出的报错
             this.setData({"value.v": 1}); // value会被设置成null
        }
      }
    })
    


    07-14
    有用
    回复
  • 那一抹笑😃 穿透阳光
    那一抹笑😃 穿透阳光
    2023-06-12

    这个提示语,就是说你的代码出现了死循环,一直在setData数据

    2023-06-12
    有用
    回复 1
    • 小白
      小白
      2023-06-21
      是的,但是实际上只有一个setData调用,除非微信底层事件处理出了问题
      2023-06-21
      回复
  • showms
    showms
    2023-06-10

    Maximum call stack size exceeded这个报错是说setData次数太多了,得你自己排查看看是不是有死循环setData

    2023-06-10
    有用
    回复 5
    • 小白
      小白
      2023-06-10
      没有,就是双向绑定导致的,如果把父组件中的model:去掉就不会有这个报错了
      2023-06-10
      回复
    • showms
      showms
      2023-06-10回复小白
      把能复现问题的代码贴出来把
      2023-06-10
      回复
    • 小白
      小白
      2023-06-10
      2023-06-10
      回复
    • showms
      showms
      2023-06-10回复小白
      parentList哪里来的?
      2023-06-10
      回复
    • 小白
      小白
      2023-06-21回复showms
      随便传个数组就行啊
      2023-06-21
      回复
登录 后发表内容