先回答问题,根据小程序的文档说明 [1],答案分两部分:
-
setData
在逻辑层的操作是同步,因此this.data
中的相关数据会立即更新; -
setData
在视图层的操作是异步,因此页面渲染可能并不会立即发生。
之所以后者是异步,主要是考虑到将数据从逻辑层发送到视图层的过程中相比直接在逻辑层内操作会花费更多时间也会有更多不确定,于是为保证前端用户体验与减少系统开销,就索性异步了。
但是setData
的设计也考虑到有些代码需要在确定setData
引起的页面渲染完成后才执行,因此setData
其实是有预留渲染完毕后的回调函数的:Page.prototype.setData(Object data, Function callback)
。
比如下面这个代码片段,就是渲染完毕后才弹出提示对话框,以保证用户体验一致 [2]:
self.setData({
"leader.name": "jack.ma"
},
function() {
wx.showToast({
title: "团队leader已经更改为:"+self.data.leader.name,
icon: "none"
})
}
)
参考资料
[1] Page.prototype.setData(Object data, Function callback)
[2] 微信小程序开发——setData的使用技巧