【问题标题】:Subscribe to another publication after one has already loaded | React-Meteor已加载后订阅另一个出版物 |反应流星
【发布时间】:2017-01-01 04:48:14
【问题描述】:

所以我有 2 个出版物,teams.dashboardboards.board,问题是,一旦 Boards 字段已经从 teams.dashboard 加载 出版物 我想从我拥有的第一个 Board 中加载 boards.board 出版物以及 boardId,例如:Boards.find().fetch()[ 0]._id。

道具准备好后,是否有任何 React 回调或 Meteor 方式来订阅它?因为出于某种原因,我使用几个“ifs”订阅了 componentDidUpdate 中的数据,并且 websocket 返回:

[{\"msg\":\"sub\",\"id\":\"R74JgCvWX8B8uphoZ\",\"name\":\"boards.board\",\"params\":[\"F4MuZ2jX8YKcf8fMr\"]}"]

但下一条消息是:

["{\"msg\":\"unsub\",\"id\":\"R74JgCvWX8B8uphoZ\"}"]

由于某种原因,发布自动取消订阅... 随后,有两条 websocket 消息说如下

[{\"msg\":\"changed\",\"collection\":\"Boards\",\"id\":\"F4MuZ2jX8YKcf8fMr\",\"fields\":{\"field1\":false,\"field2\":[],\"field3\":false,\"field4\":[],\"field5\":[]}}"]
[{\"msg\":\"changed\",\"collection\":\"Boards\",\"id\":\"F4MuZ2jX8YKcf8fMr\",\"cleared\":[\"field1\",\"field2\",\"field3\",\"field4\",\"field5\"]}"]

【问题讨论】:

  • 您可能会发现reywood:publish-composite 包对此类连接很有用。这将允许您在一个出版物中发布两个集合中的相关文档。
  • 我正在使用 publishComposite,我想要做的是,当我单击一个按钮时,订阅 board.board 这是一个不同的出版物,这已经有效。问题是我想从 createContainer 自动订阅并设置 this.board.state 但这似乎是不可能的......

标签: javascript meteor reactjs subscriptions


【解决方案1】:

您可以使用Meteor.subscribe方法的回调参数创建另一个订阅。

Meteor.subscribe('teams.dashboard', () => {
    let firstBoard = Boards.findOne({}, {fields: {}});
    if (!firstBoard) {
        return;
    }

    Meteor.subscribe('boards.board', firstBoard._id);
}

当然,您必须管理您的订阅。我不熟悉是否可以像 Blaze 一样自动取消订阅 React 组件。

【讨论】:

  • 我是否有机会将订阅保存在 createContainer 中的某个状态?
  • 因为现在,我有一个方法是 boardSubscription ,它订阅你传递给函数的 boardId 并删除实际订阅以没有我们暂时不需要的数据......您现在告诉我的事情是在 createContainer 上做所有事情,而更改 boardId 时几乎不可能
  • 我不确定你在问什么。这听起来特定于您的应用程序/React,而不是一般的流星问题。
  • 我可以通过向 React 类添加一个 ReactiveVar 来修复它,而不是使用 state 或 props,因为我无法从 createContainer 访问它们
猜你喜欢
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多