0

我有这样一个示例 Meteor 应用程序:

import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
import { Mongo } from 'meteor/mongo';

Things = new Mongo.Collection('things');

if (Meteor.isClient) {
  Meteor.startup(() => {
    Tracker.autorun(() => {
      console.log('AUTORUN');
    });
    Meteor.subscribe('things');
    render(<div>Hello world</div>, document.getElementById('app'));
  });
} else if (Meteor.isServer) {
  Meteor.publish('things', function() {
    return Things.find({});
  });
}

我希望在修改我的Things集合中的一个文档时应该触发自动运行功能,但事实并非如此。所以我的问题是:修改订阅数据后应该满足什么条件才能触发自动运行功能?

4

1 回答 1

2

你这里有2个错误:

  1. ATracker.autorun仅在其包装的函数内检测更改(作为其参数的函数)。在这里,您只有一个console.log,它不是自动运行可以观察的反应源。

  2. Pub/Sub 机制和文档本身是有区别的。当您修改文档时,您的订阅不会改变。但是如果你在你的自动运行中放置一个集合查询,那么查询返回的光标是一个响应源,当文档被修改时它会改变。

因此,您可以执行以下操作:

Meteor.startup(() => {
    Meteor.subscribe('things');

    Tracker.autorun(() => {
        Things.find(); // <= Reactive source
        console.log('AUTORUN');
    });
});
于 2017-02-25T11:03:10.850 回答