收藏
回答

关于setData对象或者数组的问题

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 需求 工具 6.6.7 2.1.3

如果data中有对象或者数组,该如何setData?

比如:

Page({

    data: {

        m_obj: {'a': {'num': 0}, ...},

    }

    click: function() {

        let obj = this.data.m_obj;   // A

/***modify obj***/               // B

        this.setData({

             m_obj: obj,                   // C

        });

    }

})

我想整体替换obj变量,上述代码是否有问题? 官方文档中说不能直接操作data中的变量,否则会造成数据不一致,那么上述代码中的A和B是否就会造成代码不一致?如果是的话,我该如何修改整个对象呢(整体替换而不是对每个属性set一次)?


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

2 个回答

  • 卢霄霄
    卢霄霄
    2018-07-14

    给 this.data赋值之后,立即有setData是不会有问题的

    2018-07-14
    赞同
    回复 3
    • 就不告诉你
      就不告诉你
      2018-07-14

      obj是一个引用,对obj的修改实际上也是对data中数据的修改,所以我担心对obj做了修改,会不会算是违反了官方文档中“不能直接操作data数据”的规则,从而造成数据不一致。目前实际代码看是没有问题的,但是心虚啊。。。

      2018-07-14
      回复
    • 卢霄霄
      卢霄霄
      2018-07-14回复就不告诉你

      没事,官方的一些demo,他也有直接给this.data赋值,然后立马就setData了,不会有问题的

      2018-07-14
      回复
    • 就不告诉你
      就不告诉你
      2018-07-14回复卢霄霄

      好的,多谢

      2018-07-14
      回复
  • 屎壳郎小仙女
    屎壳郎小仙女
    2018-07-14

    官方说的应该是不直接修改 this.data,用setData应该没啥问题吧

    2018-07-14
    赞同
    回复 2
    • 就不告诉你
      就不告诉你
      2018-07-14

      代码A处,obj是一个引用,所以对它赋值应该跟对this.data赋值是一样的,这也是我疑惑的地方

      2018-07-14
      回复
    • 屎壳郎小仙女
      屎壳郎小仙女
      2018-07-14回复就不告诉你

      this.data=a;不能这样用,想修改data中的值要用setData,官方应该说的是这个意思吧

      2018-07-14
      回复
登录 后发表内容