2016-05-28 7 views
0

Ich bekomme einen Fehler beim Weiterleiten an Dashboard-Seite. Der Fehler ist in Navbar-Komponente. Ich habe ReactMeteorData Mixin verwendet. Mein Code istKann die Eigenschaft 'currentUser' von undefined nicht lesen

const ReactMeteorDataWrap = (BaseComponent)=>{ 
    return class ExportClass extends Component { 
     getMeteorData(){ 
      let data = {}; 
      console.log(Meteor.user()); // shows undefined in console 
      data.currentUser = Meteor.user(); 
      console.log('data',data); 
      return data; 
     } 
     render(){ 
      return <BaseComponent getMeteor={()=>this.getMeteorData()} 
       {...this.props}></BaseComponent> 
     } 
    } 
} 

export default ReactMeteorDataWrap; 

Navbar.jsx die ReactMeteorData Mixins verwendet

import ReactMeteorDataWrap from '../ReactMeteorDataWrap.jsx'; 

class Navbar extends Component { 
    constructor(props){ 
     super(props); 
     this.state = { searchText: '' }; 
     this.props.getMeteor(); 
    } 
    //getMeteorData() { 
    // this.props.getMeteor(); 
    //} 


    componentDidMount(){ 
     var users = Meteor.users.find({},{fields:{'profile':1}}).fetch(); 
     var usernames = []; 
     users.map(function(user){ 
      usernames.push(user.profile.fullname); 
     }); 
     $('#typeahead').typeahead({ 
      name: 'users', 
      local: usernames 
     }); 
    } 

    handleSubmit(e){ 
     e.preventDefault(); 
     FlowRouter.go('/user/' + (this.refs.searchText.value).trim()); 
    } 

    render() { 
     var fullname = ''; 
     if(this.data.currentUser && this.data.currentUser.profile){ 
      fullname = this.data.currentUser.profile.firstname + ' ' + this.data.currentUser.profile.lastname; // error is shown here 
     } 
     return(); 
} 

export default ReactMeteorDataWrap(Navbar); 

ich undefined erhalten, während Meteor.user() in ReactMeteorDataWrap tröstlich und nicht Eigentum 'current' in Navbar.jsx lesen machen Funktion.

Antwort

1

AFAI sehen Sie übernehmen sollte die currentUser von this.props nicht this.data:

render() { 
    var fullname = ''; 
    var currentUser = this.props.currentUser; 
    if(currentUser && currentUser.profile) { 
    fullname = `${currentUser.profile.firstname} ${currentUser.profile.lastname}`; 
    // use fullname for something... 
    } 
    return; 
} 
+0

oh mein schlecht. Es tut mir leid, bevor ich getMeteorData() in der Navbar-Komponente verwendet habe, ohne irgendeine Mix-Funktion zu verwenden, daher habe ich diese Datei verwendet. Danke für Ihre Hilfe. – milan

+0

ich werde undefiniert, auch nachdem this.props.currentUser. – milan

+0

@milan Das ist, weil 'Meteor.user()' 'undefined' zurückgibt, aber Sie diesen Teil Ihres Codes nicht gepostet haben. Sie sollten überlegen, eine neue Frage mit dem entsprechenden Code zu stellen. – andlrc

Verwandte Themen