2016-06-04 4 views
0

저는 PostsComments입니다. 나는 React와 Meteor를 사용하여 게시물에 주석을 추가 할 수있는 UI를 구축하려고합니다. 댓글을 제출하면 새 댓글이 표시되고 즉시 사라집니다. 페이지를 새로 고칠 때 새로운 설명이 나타납니다. 코멘트를 추가 한 후유성 : 연결된 레코드 추가가 작동하지 않습니다.

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 문 인쇄 새 길이, 다음, 이전 번호가 인쇄 내에서

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 }}); 
}); 

내가 createContainer을 사용하여 구성 요소를 반응한다.

+0

문제가 해결되면 답변을 수락 해주십시오. – MasterAM

답변

0

post은 한 번만 평가되므로 comments 변경 될 때 쿼리를 다시 평가하지 않는다는 의미에서 커서가 "반응 적"이 아니므로 가져옵니다.

직접 패키지를 사용하거나이를 방지하기 위해 재 설계하는 방법에는 여러 가지가 있습니다.

  1. this video에 나와있는대로 직접 처리하십시오. 나는 당신이 정말로 무엇을하고 있는지 알지 못한다면 그렇게하지 않는 것이 좋습니다. 첫 번째 쿼리를 직접 관찰하고 무언가가 변경 될 때 수동으로 업데이트를 클라이언트에 적용합니다. 나는 David Weldon이 그것을 아주 잘 요약한다고 생각합니다. in this answer.
  2. 데이터를 표준화 해제하십시오. 표준 데이터 소스가 변경 될 때 중복 된 데이터를 추적해야합니다. 이로 인해 복잡성이 코드의 다른 영역으로 이동하고 구현하기가 쉽지 않습니다. CQRS와 같은 특정 디자인 패턴이 있습니다.이 패턴을 사용하면 상당히 강력하고 효율적인 방법으로이 작업을 수행 할 수 있지만 이해하기 쉽지 않습니다.
  3. reywood:publish-composite과 같은 패키지를 사용하면 수동 옵션보다 잠재적 인 성능 저하가 발생할 수 있습니다.
  4. 쉽게 게시 할 수 있도록 데이터 구조를 변경하십시오. 이는 유스 케이스와 나머지 요구 사항에 달려 있습니다. 귀하의 경우, 각각의 코멘트 문서에 articleId을 갖는 것은 각 기사에 대한 모든 코멘트를 사소한 것으로 발행 할 것입니다. 해당 필드에 색인을 추가하여 성능을 향상시킬 수 있습니다.

아직 "reactive join"문제는 아직 해결되지 않았으며 곧 새로운 GrapnQL 기반 데이터 모델이 Apollo을 통해 Meteor에 제공되기 때문에 계속 될 것입니다.

+0

옵션 4가 최상의 선택입니까? 명확히하기 위해 게시 문서에 일련의 주석 ID가있는 대신 주석 문서에 게시물 ID가 있어야합니다. 관계형 데이터베이스 인 POV에서 이해할 수 있었기 때문에 원래 그렇게했습니다. 그러나 게시물마다 주석 수가 많지 않으면 Mongo 자습서를 보지 않았습니다. http://blog.mongodb.org/post/87200945828/6- rules-of-thumb-for-mongodb-schema-design-part-1 – philpee2

+0

나는이 게시물을 과거에 보았습니다. 평범한 몽고에서는 그럴만한 이유가있을 수 있지만, 반응성이 필요할 때 더 많은 문제가 발생할 수 있습니다. 나는 두 가지 접근법을 모두 벤치마킹하지 않는다는 것을 인정한다. – MasterAM

+0

또한 해당 모델에서 게시물이 삭제 될 때 게시물의 모든 댓글을 단계적으로 삭제하는 가장 좋은 방법은 무엇입니까? – philpee2

관련 문제