2016-07-27 12 views
0

Ich habe versucht, den Benutzernamen eines eingeloggten Benutzers mit Tracker React anzuzeigen. Ich habe das Auto-Publish-Paket entfernt.Anzeige von Meteor.user(). Username mit 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/Publikationen/userPublications

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

Ich bin ein Null-Objekt während console.log(Meteor.user()) bekommen. Allerdings kann ich den aktuellen Benutzernamen mit den Meteor DevTools für Chrome sehen.

Welchen Block von Puzzle vermisse ich?

+0

Müssen Sie Meteor nicht importieren? Wie 'Import {Meteor} von 'Meteor/Meteor'? – CodeChimp

+0

Ich habe dieses Problem mit diesem [Link zu ähnlichen Problem] (https://stackoverflow.com/questions/43417385/meteorjs-get-user-profile-on-client-side/43422269#43422269) – Daltron

Antwort

0

Ich bezweifle, dass Sie Meteor.user() verwenden können. Benutzername

Versuchen Sie stattdessen

<h1>{{currentUser}}</h1> 
+0

Ich bekomme 'Sidebar .jsx: 29Uncaught ReferenceError: currentUser ist nicht definiert ' –

+0

Ich habe eine ähnliche [Antwort hier] (https://stackoverflow.com/questions/43417385/meteorjs-get-user-profile-on-client-side/43422269#43422269) – Daltron

0

Sie createContainer, um es verwalten können.

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

Einige Details hier:.

  • Meteor.loggingIn() eine reaktive Variable, die ausgeführt wird, während der Benutzer sich anmeldet, wenn dies geschieht, wird es kein Benutzerobjekt sein.
  • Sie sollten einen reaktiven Container erstellen
+0

Große Antwort! Nur eine kleine Frage. Warum hast du das extra **! ** auf der eingeloggten Seite hinzugefügt? Ich denke, dass es nicht benötigt wird. ;) –

+0

Ich habe eine ähnliche [Antwort hier] (https://stackoverflow.com/questions/43417385/meteorjs-get-user-profile-on-client-side/43422269#43422269) – Daltron