//原始代码
setCollect: Debounce(function() {
//这里防抖 500ms内只执行最后一次 所以每次都 延迟500ms显得很卡顿
if (this.isLogin === false) {
toLogin();
} else {
let that = this;
if (this.storeInfo.userCollect) {
//取消收藏-请求网络-成功 再改成图标状态 ↓ 所以会有网络延迟,再次延迟卡顿
collectDel(this.storeInfo.id).then(res => {
that.$set(that.storeInfo, 'userCollect', !that.storeInfo.userCollect);
return that.$util.Tips({
title: res.msg
});
});
} else {
//收藏-请求服务器- 成功了-再改成图标状态 ↓ 所以会有网络延迟,再次延迟卡顿
collectAdd(this.storeInfo.id).then(res => {
that.$set(that.storeInfo, 'userCollect', !that.storeInfo.userCollect);
return that.$util.Tips({
title: res.msg
});
});
}
}
}),
//这样双重延迟下来 就显得很卡了
data() {
let that = this;
return {
userCollect: '', //新增每次点击时记录初始收藏状态
.......
.......
.......
};
},
//收藏商品-优化版
setCollect() {
//未登录跳转登录页
if (this.isLogin === false) return toLogin()
//记录本次 点击前, 收藏的初始状态(收藏/未收藏), 单位时间内点击,只记录一次
if(this.userCollect === '') this.userCollect = this.storeInfo.userCollect
//视觉优先 提前立刻改变图标状态反馈给用户 提升用户体验,随便他乱点 只改变图标状态
this.storeInfo.userCollect = !this.storeInfo.userCollect
//振动反馈 不需要的话 请注释
uni.vibrateShort()
this.getCollect()
},
getCollect: Debounce(function() { //防抖放在后面减少请求
let collectStatus = this.storeInfo.userCollect
// 再次减少请求-判断是否需请求服务器更新收藏状态
//例如客户本来就是 ‘已收藏’,快速点了n次后 还是 ‘已收藏’
//那么不需要请求服务器
let whether = this.userCollect !== collectStatus
this.userCollect = '' //清空本次记录的 初始收藏状态
if (whether) {
let id = this.id
//判断请求接口 收藏/取消收藏
let collectAction = collectStatus ? collectAdd(id) : collectDel(id)
collectAction.then(res => {
return this.$util.Tips({
title: res.msg //成功提示
});
}).catch(err => {
// 网络或者服务器等原因...导致请求失败,这种情况极少会发生
// 前面提前改了图标状态,如果服务器端操作失败,给他再恢复原来的状态即可
this.storeInfo.userCollect = !collectStatus
this.$util.Tips({
title: '操作失败,请重试', // 失败提示
});
});
}
}),