0

我一直在尝试使用 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>
);
}

/Server/publications/userPublications

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

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

我错过了什么难题?

4

2 回答 2

0

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

试试这个

<h1>{{currentUser}}</h1>
于 2016-07-27T11:59:10.570 回答
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()是在用户登录时运行的反应变量。发生这种情况时,不会有用户对象
  • 您应该创建一个反应容器
于 2016-07-27T17:07:11.590 回答