我有下一個問題。我想當我點擊一個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',當我再次點擊相同的選擇狀態改變(但只有當我點擊兩次相同的選項)。我認爲這可能是由於鏈接到其他重新呈現菜單組件的路線。任何解決方案
謝謝。
您正在調用'render'方法內的'currentPages'函數。這是不允許的,因爲它可能會產生一個不定式的循環。我相信,你的實施不是你想要的。試試這個:'onTouchTap = {()=> this.currentPages(...)}' –
它會爲'onTouchTap'綁定一個_callback_,你可以調用'currentPages'函數 –
剛纔我做了這個,但是我在編輯後在我的帖子上添加了下一個錯誤:。謝謝你的答案。 – JuMoGar