小程序
小游戏
企业微信
微信支付
扫描小程序码分享
现有数据如下:
当文章评论之后,我通过重新获取整个文章列表然后setData实现评论立即更新,但这样回有bug,如下:
1:上拉加载更多之后,在item(文章)里添加评论或回复评论会导致数据错位显示。原因在于需要重新setData整个items(文章列表)以显示新的评论,但因为当前所在的位置已经超过了limit,而skip又大于limit,会导致新内容触底再次触发skip
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
在评论后面直接写一个隐藏的组件,提交评论成功后,将内容填充至组件并显示
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
写个代码片段?
// 添加评论
addComment: function(res) {
const that = this
// 注册检测
if (that.data.register === false) {
console.log('未登录')
return
} else {
db.collection('comments').add({
data: {
itemId: res.currentTarget.id,
nickName: that.data.nickName,
date: Date.now(),
content: res.detail.value,
commentType: 'comment',
}
}).then(
// 获取新的item
wx.cloud.callFunction({
name: 'get',
collection: 'items',
from: 'comments',
localField: '_id',
foreignField: 'itemId',
as: 'commentList',
skip: that.data.skip,
limit: that.data.limit
}).then(get => {
that.setData({
items: get.result.list // 更新items
showCommentInput: false, // 隐藏评论输入框
})
// console.log(that.data.skip)
)
},
// 云函数入口函数
exports.main = (event, context) => {
const db = cloud.database()
return db.collection(event.collection).aggregate()
.sort({
date: -1
.skip(event.skip)
.limit(event.limit)
.lookup({
from: event.from,
localField: event.localField,
foreignField: event.foreignField,
as: event.as
.end()
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
在评论后面直接写一个隐藏的组件,提交评论成功后,将内容填充至组件并显示
我刚刚看到可以通过findIndex()方法得到数组的下标,这样是不是就可以实现精准打击了呢~~~
写个代码片段?
// 添加评论
addComment: function(res) {
const that = this
// 注册检测
if (that.data.register === false) {
console.log('未登录')
return
} else {
db.collection('comments').add({
data: {
itemId: res.currentTarget.id,
nickName: that.data.nickName,
date: Date.now(),
content: res.detail.value,
commentType: 'comment',
}
}).then(
// 获取新的item
wx.cloud.callFunction({
name: 'get',
data: {
collection: 'items',
from: 'comments',
localField: '_id',
foreignField: 'itemId',
as: 'commentList',
skip: that.data.skip,
limit: that.data.limit
}
}).then(get => {
that.setData({
items: get.result.list // 更新items
showCommentInput: false, // 隐藏评论输入框
})
// console.log(that.data.skip)
})
)
}
},
像微信朋友圈,点赞或评论之后,会立刻反馈出新的内容(点赞的人、评论内容),且不受上拉加载影响。
不知道把item和comment分开会不会好一点呢?我现在是通过lookup聚合查询items集合和comments集合的:
// 云函数入口函数
exports.main = (event, context) => {
const db = cloud.database()
return db.collection(event.collection).aggregate()
.sort({
date: -1
})
.skip(event.skip)
.limit(event.limit)
.lookup({
from: event.from,
localField: event.localField,
foreignField: event.foreignField,
as: event.as
})
.end()
}