2017-04-24 68 views
0

我有下一個問題。我想當我點擊一個MenuItem時,我的組件的狀態會隨着所點擊的MenuItem的名稱而改變。我願意這樣做:setState ReactJS Material UI不起作用

export default class MenuAlumno extends React.Component { 
constructor() { 
    super(); 
    this.state = { 
     drawerOpen:false, 
     currentPage: 'Inicio' 
    } 
}; 

currentPages = (currentPage) => { 
    this.setState({ 
     currentPage: currentPage 
    }); 
    //this.state.currentPage = currentPage; 
} 

render() { 
    return (
     <div> 
      <Drawer 
       docked = {false} 
       width = {200} 
       open = {this.state.drawerOpen} 
       onRequestChange = {(drawerOpen) => this.setState({drawerOpen})} 
      > 
       <MenuItem primaryText = "Inicio" onTouchTap = {this.currentPages('Inicio')} containerElement = {<Link to="/administrador/inicio"/>}/> 
       <MenuItem primaryText = "Nueva Incidencia" onTouchTap = {this.currentPages('Nueva Incidencia')} containerElement = {<Link to="/administrador/nueva_incidencia"/>}/> 
       <MenuItem primaryText = "Incidencias Recibidas" onTouchTap = {this.currentPages('Incidencias Recibidas')} containerElement = {<Link to="/administrador/incidencias_recibidas"/>}/> 
       <MenuItem primaryText = "Informes" onTouchTap = {this.currentPages('Informes')} containerElement = {<Link to="/administrador/informes"/>}/> 
      </Drawer> 
     </div> 
    ); 
} 

但我有一個錯誤:

Warning: setState(...): Cannot update during an existing state transition (such as within 'render' or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved to 'componentWillMount'.

什麼可能呢?謝謝你們。

編輯:----

如果我這樣做:(添加()=>開始通話功能)

<MenuItem primaryText = "Inicio" onTouchTap = {() => this.currentPages('Inicio')} containerElement = {<Link to="/administrador/inicio"/>}/> 
       <MenuItem primaryText = "Nueva Incidencia" onTouchTap = {() => this.currentPages('Nueva Incidencia')} containerElement = {<Link to="/administrador/nueva_incidencia"/>}/> 
       <MenuItem primaryText = "Incidencias Recibidas" onTouchTap = {() => this.currentPages('Incidencias Recibidas')} containerElement = {<Link to="/administrador/incidencias_recibidas"/>}/> 
       <MenuItem primaryText = "Informes" onTouchTap = {() => this.currentPages('Informes')} containerElement = {<Link to="/administrador/informes"/>}/> 

我沒有任何錯誤,但不工作。當我點擊狀態沒有更新,繼續是'Inicio',當我再次點擊相同的選擇狀態改變(但只有當我點擊兩次相同的選項)。我認爲這可能是由於鏈接到其他重新呈現菜單組件的路線。任何解決方案

謝謝。

+0

您正在調用'render'方法內的'currentPages'函數。這是不允許的,因爲它可能會產生一個不定式的循環。我相信,你的實施不是你想要的。試試這個:'onTouchTap = {()=> this.currentPages(...)}' –

+0

它會爲'onTouchTap'綁定一個_callback_,你可以調用'currentPages'函數 –

+0

剛纔我做了這個,但是我在編輯後在我的帖子上添加了下一個錯誤:。謝謝你的答案。 – JuMoGar

回答

0

我解決了它,當我用我想設置爲當前頁面的名稱調用我的組件MenuAlumno時添加了一個道具。有用。如果有人有其他解決方案,我會很樂意嘗試。再見。