我有Posts
和Comments
,我正在尝试构建用于使用React和Meteor为帖子添加评论的UI。当我提交评论时,新评论会出现,然后立即消失。当我刷新页面时,新评论就在那里。
Meteor.publish('post', function(postId) {
return Posts.find(postId);
});
Meteor.publish('comments.forPost', function(postId) {
const post = Posts.findOne(postId);
return Comments.find({_id: { $in : post.comments } } );
});
Meteor.methods({
'comments.insert'({ postId, content }) {
check(postId, String);
check(content, String);
const commentId = Comments.insert({
createdAt: new Date(),
userId: this.userId,
content,
});
Posts.update(postId, { $addToSet: { comments: commentId }});
});
在我的React组件中,我使用createContainer
:
export default createContainer((props) => {
const id = props.params.id;
const postHandle = Meteor.subscribe('post', id);
const isLoading = !postHandle.ready();
Meteor.subscribe('comments.forPost', id);
const post = Posts.findOne(id);
const comments =
isLoading ? [] : Comments.find({_id: { $in: post.comments } }).fetch();
console.log(comments.length);
return {
comments,
isLoading,
question,
};
}, PostShow);
我的console.log
语句在添加注释后打印新长度,然后打印前一个数字。
答案 0 :(得分:0)
这是因为在您的出版物中post
仅被评估一次,因此您的光标不是"被动"从某种意义上说,当你comments
更改时,它不会重新评估查询。
有几种方法可以直接使用包或重新设计来避免它。
articleId
将使每篇文章的所有评论都发布得很简单。您可能希望为该字段添加索引以提高性能。