javascript - 反应。组件未隐藏 onClick
问题描述
当我单击一个按钮时,会显示一个组件。如果再次单击该按钮,则组件不会更改状态。
state = {
isActive: true
}
toggleMnu = () => {
this.setState({isActive: false});
}; // Show menu function
hideMnu = () => {
this.setState({isActive: true});
}; // Hide menu function
toggleOnClick = e => {
e.preventDefault();
!this.props.hideMnu
? this.toggleMnu()
: this.hideMnu();
};
render(){
return(
<button type="button" onClick={this.toggleOnClick}>Menu</button>
{this.state.isActive ? null : <div className="extended-menu-item">
{menuInfo.map((menuItem ,index)=>{return <ExtendedMenuItem click= {this.hideExtendedNav} {...menuItem} key={index}/>
})} // The component which shows menu on click
)}
解决方案
这是因为您正在直接更改状态。你应该这样做:
this.setState((prevState) => {
return {isActive: !prevState.isActive}
// reverse old state ^^
});
推荐阅读
- html - 如何从跨度类和时间类Jsoup中获取数据字符串?
- python - Pandas 绘制带有误差线和标记的折线图
- ios - iOS - 当点击 UIView 上的任意位置时如何从 navigationItem.searchController 关闭键盘?
- php - Ci PHP发送带有媒体的电子邮件在移动浏览器中不起作用
- node.js - 节点 - 在浏览器中下载现有的 excel
- html - 我的“ngSubmit”有时会出错
- kubernetes - 使用 Istio ServiceEntry 的域注册
- c# - 从 MS SQL 数据库获取数据到 Xamarin Android App Gridview
- python - 在 Python 模块而不是 __main__ 的上下文中执行 REPL 代码?
- email - 在 gsuite 中为不同的客户添加不同的 logo