javascript - 如何发布一条数据然后停止对其使用react?

标签 javascript meteor

我想制作一个主页,其中发布几条数据,但只有当用户第一次访问该页面时:人们会得到最新发布的 10 篇文章,但仅此而已 - 它不会不断变化。

有没有办法让内置的发布/订阅机制在一定时间或记录数后自行关闭,或者其他机制?

现在我正在使用一个非常简单的设置,不会“关闭”:

latestNews = new Mongo.Collection('latestNews');

if (Meteor.isClient) {
  Meteor.subscribe("latestNews");
}
if (Meteor.isServer) {
  Meteor.publish('latestNews', function() {
    return latestNews.find({}, {sort: { createdAt: -1 }, limit : 10});
  });
}

最佳答案

Meteor 中实现的发布/订阅模式都是关于响应式(Reactive)数据更新的。在您的情况下,这意味着如果文章的作者或最后更新日期发生变化,那么用户将立即看到此更改反射(reflect)在他们的主页上。

但是您希望发送数据一次并且不再更新。
Meteor 有一个内置功能来处理这种情况:Methods 。方法是客户端告诉服务器执行计算和/或发送纯非 react 数据的一种方式。

//Server code
var lastTenArticlesOptions = {
  sort : { 
    createdAt : -1
  },
  limit : 10
}

Meteor.methods({
  'retrieve last ten articles' : function() {
    return latestNews.find({}, lastTenArticlesOptions).fetch()
  }
})

请注意,与出版物相反,我们不会发送 Mongo.Cursor !游标在出版物中用作告诉服务器要发送哪些数据的便捷(也称为魔术)方式。
在这里,我们直接通过fetch游标来发送数据,以获得一个文章数组,该数组将是 EJSON.stringifyied自动发送给客户端。

<小时/>

如果您需要向客户端发送 react 性数据,并在稍后的某个时间点停止推送更新,那么您最好的选择是暂时依赖发布/订阅,然后手动停止 publication (服务器端)或 subscription (客户端):

Meteor.publish('last ten articles', function() {
  return latestNews.find({}, lastTenArticlesOptions)
})
var subscription = Meteor.subscribe('last ten articles')
//Later...
subscription.stop()

在服务器端,您将存储发布句柄 (this),然后对其进行操作。

停止订阅或发布不会破坏已发送的文档(用户不会看到最后十篇文章突然消失)。

关于javascript - 如何发布一条数据然后停止对其使用react?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801498/

相关文章:

javascript - 如何获取已编译的 Meteor 应用程序中正在访问的实际 URL?

javascript - 从 Controller 设置 ng-show 值但我的代码不工作

javascript - JSON 文字操作

javascript - 函数内的 fullcalendar-4

javascript - meteor 流路由器并在 react 组件中获取路由参数

javascript - 向 DOM 添加元素时调用 Meteor 辅助函数

node.js - 更新集合时 Meteor.flush 中的 meteor 异常会中断客户端之间的 react 性

meteor - 使用空格键遍历数组

javascript - .load() 函数不会加载 JavaScript

javascript - 为什么使用 IFFE 闭包而不是常规闭包?