2016-05-28 5 views
0

Я получаю сообщение об ошибке при перенаправлении на страницу панели. Ошибка в компоненте Navbar. Я использовал Mix ReactMeteorData. Мой кодНевозможно прочитать свойство «currentUser» undefined

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 который использует ReactMeteorData Примеси

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

я неопределенными в то время как утешая Meteor.user() в ReactMeteorDataWrap и не может читать свойство 'CurrentUser' в Navbar.jsx визуализации функция.

ответ

1

AfaI могут видеть Вы должны принять currentUser от this.props не 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

ой мой плохой. Извините, прежде чем я получил getMeteorData() в компоненте Navbar без использования каких-либо функций mixin, поэтому я использовал this.data. Спасибо за вашу помощь. – milan

+0

Я получаю undefined даже после выполнения this.props.currentUser. – milan

+0

@milan Thats, потому что 'Meteor.user()' возвращает 'undefined', но вы не разместили эту часть своего кода. Вы должны рассмотреть вопрос о новом вопросе с соответствующим кодом. – andlrc

Смежные вопросы