使用Tracker React显示Meteor.user()。用户名

时间:2016-07-27 11:50:55

标签: meteor meteor-react meteor-tracker

我一直在尝试使用Tracker React显示登录用户的用户名。 我删除了自动发布包。

/Client/components/dashboard/sidebar.jsx

import  React, {Component} from 'react'
import TrackerReact from 'meteor/ultimatejs:tracker-react';

export default class Sidebar extends TrackerReact(Component) {

constructor() {
    super();
    this.state = {
        subscription: {
            users: Meteor.subscribe('users')
        }
    };

}
 render() {
    return( 
     <div>
          <h1>{Meteor.user().username}</h1>
    </div>
);
}

/服务器/出版物/ userPublications

Meteor.publish("users", function () {
    return Meteor.users.find();
});

我在console.log(Meteor.user())时得到一个空对象。但是,我可以使用Meteor DevTools查看当前的用户名。

我错过了哪些谜题?

2 个答案:

答案 0 :(得分:0)

我怀疑你可以使用Meteor.user()。用户名

试试这个

<h1>{{currentUser}}</h1>

答案 1 :(得分:0)

您可以使用createContainer进行管理。

import { Meteor } from 'meteor/meteor';
import React, { Component, PropTypes } from 'react';
import { createContainer } from 'meteor/react-meteor-data';

export class Sidebar extends Component {
  static propTypes = {
    loggedIn: PropTypes.bool.isRequired,
    loggingIn: PropTypes.bool.isRequired,
    currentUser: PropTypes.shape({
      username: PropTypes.string
    })
  }
  render() {
    const { loggingIn, loggedIn } = this.props;
    return (
      <div>
        {(() => {
          if (loggingIn) {
            return <Loading />
          } else if (loggedIn) {
            // whatever you want here.
          } else {
            <h1>Please Log In</h1>
          }
        })()}
      </div>
    )
  }
}

export default createContainer(() => ({
  user: Meteor.user(),
  loggedIn: !Meteor.userId(),
  loggingIn: Meteor.loggingIn()
}), Sidebar);

这里有一些细节:

  • Meteor.loggingIn()是在用户登录时运行的反应变量。发生这种情况时,将不会有用户对象
  • 您应该创建一个反应容器