如何显示来自(Meteor)的数据反应findOne?

时间:2018-12-05 06:14:52

标签: javascript reactjs mongodb meteor

我正在尝试从findOne进行数据呼叫。我已将查询放入follwer变量中。当我管理console.log('Follower matched', follower)的显示数据时,但是当我想使用此代码console.log('Follower Id', follower._id)显示ID时,它显示错误Uncaught TypeError: Cannot read property '_id' of undefined 如何解决此问题? follower follower._id

renderTasks() {
    const followersSub = Meteor.subscribe('followers');
    if (followersSub.ready()) { // followers collection has been synced with client
        var follower =  Followers.findOne(
                            {userID : this.props.task._id, followedID: Meteor.userId()},
                            { sort: { createdAt: -1 }}
                        );
        console.log('Follower matched', follower); // should be present now
        console.log('Follower Id', follower._id);    
    }else{
        console.log('Not found');
    }   
}

导入API代码:

import {Events, Followers} from './../../api/events';

在API(事件)中发布代码:

if(Meteor.isServer) {
Meteor.publish('followers', function() {
      return Followers.find();
   });
}

1 个答案:

答案 0 :(得分:0)

您已订阅'Followers',但订阅可能尚未准备好。 Meteor.subscribe('Followers');之后的代码很可能找不到文档。

为了了解您的订阅是否准备就绪,您需要检查订阅句柄中的ready()方法:

const followersSub = Meteor.subscribe('Followers');
if (followersSub.ready()) { // followers collection has been synced with client
    var follower =  Followers.findOne(
                        {userID : this.props.task._id, followedID: Meteor.userId()},
                        { sort: { createdAt: -1 }}
                    );
    console.log('Follower matched', follower); // should be present now
    console.log('Follower Id', follower._id);    
}

使用withTracker跟踪订阅状态

现在,您的代码如何“等待”直到ready()是一个真实值?由于订阅句柄是反应性变量,因此您将使用Tracker来“跟踪”订阅的内部状态更改并执行更改。在流星反应组件withTracker中,它是默认内置的。

Meteor guide on withTracker对此进行了详细说明。如果您遵循该指南并将其应用于代码,则应该能够成功订阅文档。