文档原话是:
使用unicloud-db组件的update方法,除了更新云数据库中的数据外,也会同时更新当前页面的unicloud-db组件中的data数据,自然也会自动差量更新页面渲染的内容。
按this.$refs.udb.update(id, value)方法更新数据库后,似乎没有更新本地的页面内容,需要success后,再次调用this.$refs.udb.loadData({clear:true})手动刷新才能更新本地,与文档描述不符,组件的源代码也没有看出更新了本地数据,是不是我对文档描述的理解有误?

- 发布:2021-03-19 22:01
- 更新:2022-10-24 19:59
- 阅读:2464
unicloud-db 组件的update方法没有自动差量更新

名图客 (作者)
比如这个改价方法,以前使用配合vuex使用云函数,只需要调用一次云函数方法,访问一次库就可以解决了,尝试使用clientdb及unicloud-db组件,因为没有字段更新命令,需要单独使用云函数先push一个修改记录record,其次再调用unicloud-db 的update方法更新价格,最后再刷新列表,访问了三次云函数(clientdb也是封装的云函数吧),进了三次库,感觉被clientdb和unicloud-db组件坑了一把啊,头大~~~如果再弃用clientdb,又得重新反复折腾一遍
···
changePrice() {
if (this.dirty)
this.addRecord({ //云函数调用push字段更新,增加订单的操作记录
by: this.order.stid,
name: '调整价格为:' + this.price + '.00元',
time: Date.now()
}).then(res => {
this.udb.update(this.order._id, { //更新订单价格
price: this.price,
utime: Date.now()
}, {
success: res => {
this.priceShow = false
this.dirty = false
this.udb.loadData({ clear: true }) // 刷新本地列表
}
})
})
},
···

名图客 (作者)
unicloud-db最新dev版的源代码,update方法调用后是直接返回uniCloud.database().update的结果,没有对datalist数据做差量更新处理,意味着用户得再刷一次库。
···
update (id, value, {
action,
showToast = true,
toastTitle,
success,
fail,
complete,
needConfirm = true,
needLoading = true,
loadingTitle = ''
} = {}) {
if (needLoading) {
uni.showLoading({
title: loadingTitle
})
}
/ eslint-disable no-undef /
let db = uniCloud.database()
if (action) {
db = db.action(action)
}
return db.collection(this.collection).doc(id).update(value).then((res) => {
success && success(res)
if (showToast) {
uni.showToast({
title: toastTitle || t('uniCloud.component.update.success')
})
}
}).catch((err) => {
fail && fail(err)
if (needConfirm) {
uni.showModal({
content: err.message,
showCancel: false
})
}
}).finally(() => {
if (needLoading) {
uni.hideLoading()
}
complete && complete()
})
},
···
7***@qq.com
同感 反正很难受啊 改完数据 必须再刷新
2021-07-23 16:01