2017-02-19 2 views
0

Im novice to React js, я не знаю, что не так с кодом ниже, но я получаю setState не является функцией error.Please помочь мне исправить это.Reactjs this.setState не является функциональной ошибкой

class AppBarLayout extends React.Component { 
    constructor(props) { 
     super(props); 

     this.state = { 
     visibleSideBar:true, 
     slide:"" 
     } 
    } 
    showProfile(){ 

    this.setState({ 
     slide:'slide' 
    }); 
    console.log(this.state.slide); 
    } 
    render(){ 
    return(
      <div> 
     <header> 
      <NavBar show={this.showProfile}/> 
      <Profile slide={this.state.slide} /> 
     </header> 
     </div> 
    ); 
    } 
} 
export default AppBarLayout; 
+0

Возможный дубликат [Невозможно получить доступ Реагировать экземпляр (это) внутри обработчика событий] (http://stackoverflow.com/questions/29577977/unable-to-access-react- instance-this-inside-event-handler) –

ответ

2

Расширяя Delapouite ' s ответ, если вам не нравится связывать каждую функцию в конструкторе, вы можете использовать функции стрелок для автоматического связывания к правильному контексту.

Например:

class AppBarLayout extends React.Component { 
    constructor(props) { 
     super(props); 

     this.state = { 
     visibleSideBar:true, 
     slide:"" 
     } 
    } 

    // Now showProfile is an arrow function 
    showProfile =() => { 
    this.setState({ 
     slide:'slide' 
    }); 
    console.log(this.state.slide); 
    } 

    render(){ 
    return(
     <div> 
     <header> 
      <NavBar show={this.showProfile}/> 
      <Profile slide={this.state.slide}/> 
     </header> 
     </div> 
    ); 
    } 
} 
export default AppBarLayout; 
+0

Будьте осторожны, используя этот синтаксис, он не является стандартным (пока) и нуждается в конкретном преобразовании Babel. – Delapouite

+0

Yup, хотя он становится [довольно там] (http://caniuse.com/#search=arrow%20functions) –

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