【问题标题】:How to showing data from (Meteor) react findOne?如何显示来自(Meteor)的数据反应 findOne?
【发布时间】:2019-05-06 15:56:11
【问题描述】:

我正在尝试来自findOne 的数据调用。我已将查询放在follwer 变量中。当我安慰 console.log('Follower matched', follower) 它的显示数据时,但是当我想用此代码显示 id console.log('Follower Id', follower._id) 它显示错误 Uncaught TypeError: Cannot read property '_id' of undefined 我该如何解决这个问题?

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();
   });
}

【问题讨论】:

    标签: javascript reactjs mongodb meteor


    【解决方案1】:

    您已订阅'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 来“跟踪”订阅的内部状态更改并根据更改采取行动。在 Meteor-React 组件 withTracker 这是默认内置的。

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

    【讨论】:

    • 感谢您的回答。我使用了您的代码renderTasks。但它的显示订阅还没有准备好。我怎样才能解决这个问题?我没用过withtracker
    • API js 代码:import { Mongo } from 'meteor/mongo'; export const Tasks = new Mongo.Collection('tasks'); export const Followers = new Mongo.Collection('followers'); if(Meteor.isServer) { // This method will remove Meteor.publish('Followers', function() { return Followers.find(); }); }
    • 请在您的问题中添加后续代码,而不是在 cmets 中。否则可能很难全面了解您在做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2019-01-23
    • 1970-01-01
    相关资源
    最近更新 更多