javascript - ReactJS - 单击时更改属性值
问题描述
我正在使用 ReactJS 框架开发一个 Web 应用程序。
我正在尝试编写一个事件,当我单击集合中的一个元素时,它会将所选属性的值更改为 true,并将其余元素设置为 false。
<NavigationButton to="/" label="Dashboard" exact>
<MenuItem className={classes.menuItem} selected={true/false}>
<ListItemIcon className={classes.icon}>
<Home />
</ListItemIcon>
<ListItemText classes={{ primary: classes.primary }} inset primary="Strona główna" />
</MenuItem>
</NavigationButton>
<NavigationButton to="/payment" label="Payment" exact>
<MenuItem className={classes.menuItem} selected={true/false}>
<ListItemIcon className={classes.icon}>
<Payment />
</ListItemIcon>
<ListItemText classes={{ primary: classes.primary }} inset primary="Moje płatności" />
</MenuItem>
</NavigationButton>
我该怎么做呢?
解决方案
我认为最好的方法是将所有组件包含在一个有状态的组件中,该组件将跟踪您的哪些元素被选中或未选中。然后,该组件将具有一个函数(类似于handleClick
),该函数将接收该按钮类并setState
更改为现在应该选择的元素。现在您可以将函数和状态(当前假定选择的内容)作为道具传递给子元素和 onClick,它将触发对父组件的回调,告诉它setState
. 然后在每个单独的组件中,您可以检查是否应该选择道具this.props.currentSelect === ${name of the element}
来查看是否应该选择它们的元素
// some jsx file
class StatefulComponent extends React.Component{
constructor(props){
super(props);
this.state = {
currentlySelect: "someMenuItem"
}
this.handleClick = this.handleClick.bind(this);
}
handleClick(str){
this.setState({
currentlySelect: str
})
}
render(){
return(
<React.Fragment>
<NavigationButton to="/" label="Dashboard" exact>
<MenuItem handleClick={this.handleClick} currentlySelect={this.state.currentlySelect} className={classes.menuItem} selected={true / false}>
<ListItemIcon className={classes.icon}>
<Home />
</ListItemIcon>
<ListItemText classes={{ primary: classes.primary }} inset primary="Strona główna" />
</MenuItem>
</NavigationButton>
<NavigationButton to="/payment" label="Payment" exact>
<MenuItem handleClick={this.handleClick} currentlySelect={this.state.currentlySelect} className={classes.menuItem} selected={true / false}>
<ListItemIcon className={classes.icon}>
<Payment />
</ListItemIcon>
<ListItemText classes={{ primary: classes.primary }} inset primary="Moje płatności" />
</MenuItem>
</NavigationButton>
</React.Fragment>
)
}
}
推荐阅读
- python - 如果python“逐行”运行文件,它如何在定义之前使用函数?
- leaflet - 如何在 Leaflet 的 TileLayer 上定义起始网格位置?
- reactjs - Cypress Test runner --- 我可以让“下载 React DevTools 以获得更好的开发体验”的警告消息消失吗?
- python - 使用 Selenium 抓取 javascript 网站,其中页面随机无法跨多个浏览器加载
- azure-service-fabric - 带有远程侦听器的 Azure Service Fabric ASP .net
- java - 列表
- 到地图
>、排序键、排序值和进程 - 到地图
- blob - 无法读取 Blob 存储帐户目录和子目录
- r - 如何在 RPostgreSQL 中使用参数化 IN
- mysql - MySQL 错误:1005 无法创建表(错误号:150)
- python-3.x - Pandas 日期时间问题:如何将缺少的周末插入到 python 数据框中的现有日期列中