reactjs - setState 没有被调用 onClick
问题描述
使用 material-ui v3.9.4、react-router v3。创建了一个左侧导航栏,其中包含一个包含链接项目的列表以重定向到另一个页面。由于某种原因,当我单击一个项目时,页面被重定向,但直到第二次单击以显示活动项目时状态才会更新。知道为什么会这样吗?代码如下。我已经控制台记录了 setState 更改,直到第二次单击才会打印。
class LeftNavigation extends Component {
constructor(props) {
super(props);
this.state = {
selectedIndex: 0,
sidebarCollapsed: false,
}
}
handleListItemClick = (event, index) => {
console.log("CLICKED"); //prints first click
this.setState({ selectedIndex: index }, () => {
console.log("SELECTED INDEX:: ", this.state.selectedIndex) //prints second click
});
}
handleCollapse = () => {
this.setState({ sidebarCollapsed: !this.state.sidebarCollapsed })
}
render() {
const { classes } = this.props;
return (
<div className={this.state.sidebarCollapsed ? classes.rootCollapsed : classes.root}>
<List component="nav">
<ListItem
button
component={props => <Link to="./pageOne" {...props} />}
selected={this.state.selectedIndex === 0}
onClick={(event) => this.handleListItemClick(event, 0)}
>
<ListItemIcon>
<CalendarIcon />
</ListItemIcon>
<ListItemText classes={{ primary: classes.listText }} primary="Page One" />
</ListItem>
<ListItem
button
onClick={(event) => this.handleListItemClick(event, 1)}
component={props => <Link to="./pageTwo" {...props} />}
selected={this.state.selectedIndex === 1}
>
<ListItemIcon>
<MailIcon />
</ListItemIcon>
<ListItemText classes={{ primary: classes.listText }} primary="Page Two" />
</ListItem>
<ListItem
button
component={props => <Link to="./pageThree" {...props} />}
selected={this.state.selectedIndex === 2}
onClick={(event) => this.handleListItemClick(event, 2)}
>
<ListItemIcon>
<NotesIcon />
</ListItemIcon>
<ListItemText classes={{ primary: classes.listText }} primary="Page Three" />
</ListItem>
</List>
<div
onClick={this.handleCollapse}>
{this.state.sidebarCollapsed ? <ChevronRight /> :
<div><ChevronLeft /><p>Collapse sidebar</p></div>}
</div>
</div>
)
}
}
export default withStyles(styles)(LeftNavigation );
解决方案
推荐阅读
- python - 当 slugsize 未满时 Heroku slugsize 错误
- python - 从成员对象 discord.py 中获取成员的用户名和区别
- python - Python中函数的未解决参考
- python - 将数据框列字符串值转换为虚拟变量列
- sql - 为什么 postgresql 认为记录为空,而它显然不是?
- laravel - 在 IIS 10 中使用 laravel websocket 时出错
- javascript - 唯一配对数组元素的最佳方法(其中元素是原始类型和数组)
- xcode - 如何在 CarPlay 上显示歌曲
- timer - 可以同时执行两个 Linux 内核计时器处理程序吗?
- python - 过滤在 Pandas 中读取的 CSV 数据