gpt4 book ai didi

mongodb - 我的 Meteor 订阅在路由更改后没有更新

转载 作者:可可西里 更新时间:2023-11-01 10:48:09 28 4
gpt4 key购买 nike

我有一个集合,问题

我通过 FlowRouter 将用户从一条路线发送到另一条路线。

第一个路由使用了questions中的所有文档,但只有一个字段:_id

第二条路线只需要一个文档,但需要所有字段。

尽管在第二个路由中进行了新的订阅,但只能访问旧的 _id 字段(直到用户手动刷新)。

第一个路由的组件是这样订阅的:

getMeteorData() {
const questionsHandle = Meteor.subscribe('questions')

return {
questions: Questions.find().fetch()
}
}

发布只发布_id字段:

Meteor.publish('hspUserQuestionsFromPracticeSet', function() {
return Questions.find({}, {fields: {_id: 1}})
})

路由更改仅通过 FlowRouter.go(newRoute) 发生(我正在使用 Flowrouter-SSR 的一些更新版本)。

第二条路线:

getMeteorData() {

const questionHandle = Meteor.subscribe('questionById', this.props.questionId)

return {
question: Questions.findOne(),
questionReady: questionHandle.ready()
}
},

第二次发布:

Meteor.publish('questionById', function(questionId) {
return Questions.find({_id: questionId})
})

当发生路由切换时,questions 中的所有文档都已被订阅,因此 Questions.findOne() 从该列表中找到第一个文档.所以我既有错误的文档,也只有一个字段。

我该如何解决这个问题?我已经尝试使用其中只有 this.stop() 的新出版物取消订阅 componentWillUnmount,但这不起作用。

最佳答案

我想你正在使用 Data Loading In React .

您的第一个订阅应该像第二个订阅一样处于就绪状态,这样您就可以确保在显示时加载了整个列表。

getMeteorData() {
const questionsHandle = Meteor.subscribe('questions')
return {
ready: questionsHandle.ready(),
questions: Questions.find().fetch()
}
}

您忘记了要在 findOne 中显示哪个问题。

getMeteorData() {
const questionHandle = Meteor.subscribe('questionById', this.props.questionId)

return {
question: Questions.findOne(this.props.questionId),
questionReady: questionHandle.ready()
}
},

关于mongodb - 我的 Meteor 订阅在路由更改后没有更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47762925/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com