Meteor - Tracker.autorun没有刷新更新数据。

时间:2017-08-10 02:44:53

标签: javascript reactjs meteor react-dom

我有一些我为短信应用编写的基本代码:

import React from "react";
import ReactDOM from "react-dom";
import {Meteor} from "meteor/meteor";
import {Tracker} from "meteor/tracker"

import {Texts} from "./../imports/api/Text";
import App from "./../imports/ui/App"

Meteor.startup(() => {
    Tracker.autorun(() => {
        let texts = Texts.find().fetch();
        console.log(texts)
        ReactDOM.render(<App />, document.getElementById("app"));
    });
});

但问题是当我进入控制台时,我得到一个空数组。

Text.js:

import {Mongo} from "meteor/mongo";

export const Texts = new Mongo.Collection("texts");

我在main.js文件或Text.js文件中遗漏了什么?我不知道现在该做什么,因为我已经从我的其他项目中复制并粘贴了它,它似乎在这里不起作用,但它在我的旧项目中有效。我没有解决方案!!请帮忙!!

1 个答案:

答案 0 :(得分:0)

除非您仍然安装了软件包autopublish,否则您需要从服务器发布数据并在客户端上订阅它。

要在服务器上的某个位置发布所需内容:

import { Texts } from "/imports/api/Text";
Meteor.publish('texts', function () {
    return Texts.find();
});

然后在使用该集合之前,您需要在客户端订阅:

Meteor.startup(() => {
    Meteor.subscribe('texts'); // <--- 
    Tracker.autorun(() => {
        let texts = Texts.find().fetch();
        console.log(texts)
        ReactDOM.render(<App />, document.getElementById("app"));
    });
});

本文解释了原因: https://medium.com/meteor-js/data-flow-from-the-database-to-the-ui-three-layers-of-meteor-d5e208b466c3