请教官方回应一下是否要将 setData API 修改为只读
发布于 5 年前 作者 weijiang 12999 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

因为官方没有为 Page 和 Component 提供 computed 和 watch 属性,所以个人通过重新封装 setData 方法实现了这部分功能。

今天换了个电脑,重新安装了开发者工具后发现页面报错,原因是无论是 Page 还是 Component 的 setData 方法都已经变成只读属性,没有办法覆写该属性。

发现 setData 变成只读属性的微信开发者工具:Mac 版 v1.02.1809260

发现 setData 属性可以被覆写的微信开发者工具:Mac 版  v1.02.1809111

  • 希望提供的能力

欲哭无泪啊,API 属性修改要不要这么任性啊!两个这么小的版本之间更改了这么重要的特性,项目受影响很大啊!!~~请官方给一个明确的说法吧!希望不要将 setData 变成只读属性。

VM3102:1 thirdScriptError
Cannot assign to read only property 'setData' of object '#<r>'; [Component] Lifetime Method Error @ publicComponents/EnsureLogin/index#a
TypeError: Cannot assign to read only property 'setData' of object '#<r>'
    at r.a (http://127.0.0.1:59968/appservice/deps.js:415:139)
    at r.safeCallback (http://127.0.0.1:59968/appservice/__dev__/WAService.js:14:10521)
    at r.call (http://127.0.0.1:59968/appservice/__dev__/WAService.js:14:10285)
    at t (http://127.0.0.1:59968/appservice/__dev__/WAService.js:14:23150)
    at t (http://127.0.0.1:59968/appservice/__dev__/WAService.js:14:23463)
    at t (http://127.0.0.1:59968/appservice/__dev__/WAService.js:14:23405)
    at c (http://127.0.0.1:59968/appservice/__dev__/WAService.js:14:23473)
    at Function.u.pretendAttached (http://127.0.0.1:59968/appservice/__dev__/WAService.js:15:1227)
    at Object.t.attachView (http://127.0.0.1:59968/appservice/__dev__/WAService.js:16:20286)
    at D (http://127.0.0.1:59968/appservice/__dev__/WAService.js:18:1088)
4 回复

旧版本的基础库 setData 才是只读的,为了支持自定义组件扩展功能,2.2.3版本开始 setData 已经调整为可覆盖的字段,想问下你在两个版本工具下分别使用的哪个版本的基础库?

小程序中是否有引入插件?

建议自己包装一个$setData方法而不是复写系统自带的方法…无论使用什么js框架,复写方法都相当于放弃了自己把控风险的能力。

@June @凌云摘星傲苍穹

经测试,在 SDKVersion v2.2.2 以下,如果页面引用了自定义组件,则 setData 是只读,否则可被覆写。

SDKVersion v2.2.3 以上,setData 可被覆写。

代码片段:wechatide://minicode/sWefXimJ7s3e

附提交个小 bug:

微信开发者工具 v1.02.1809260,调试基础库选择 2.2.5 时,wx.getSystemInfoSync() 返回的 SDKVersion 是 2.2.4。

回到顶部