[英]How can I change the checkbox styles and icons when hover on it in Material-UI React?
[英]React Material-UI How can I add a checkbox which is separate from table row click
我想区分复选框单击和行单击。
例如,我想要这种行为,当我单击复选框时,只选中复选框,当我单击行时,只选中行但未选中复选框。 我怎样才能做到这一点?
下面是我的代码
handleClick = (row) => {
var self = this;
var currentlist = self.state.routelist;
let newarray = [...this.state.routelist];
if (newarray[row].isselected === true) {
newarray[row].isselected = false;
} else if (newarray[row].isselected === false) {
newarray[row].isselected = true;
}
self.setstate({ routelist: newarray });
if (!isnan(row))
{
var pos =
{
routeid: currentlist[row].routeid,
isvisible: currentlist[row].isselected
};
var param = {
receiver: "event_map",
command: "show_route",
data: pos
};
//console.log("show_route: " + param.data.routeid + " visible: " + param.data.isvisible);
this.msgdispatcher.triggermessagedispatcher(param);
//zoom to route
if (currentlist[row].routeid != null ||currentlist[row].routeid != undefined)
{
var param = {
receiver: "event_map",
command: "zoom_to_route",
data: currentlist[row].routeid
};
//console.log("zoom_to_route: routeid=" + param.data);
this.msgdispatcher.triggermessagedispatcher(param);
}
}
}
这是渲染方法
render() {
return (
<div style={{ padding: "0px" }}>
<div style={{ padding: "0px" }}>
<Table
onCellClick={this.handleClick}
height={window.innerHeight}
multiSelectable={this.state.multiSelectable}
selectable={this.state.selectable}
>
<TableBody
displayRowCheckbox={this.state.displayRowCheckbox}
showRowHover={this.state.showRowHover}
deselectOnClickaway={this.state.deselectOnClickaway}
>
{this.state.routeList.map((row, index) => (
<TableRow
key={index}
style={{ backgroundColor: row.DistressColor }}
selected={this.state.routeList[index].isSelected}
>
<TableRowColumn style={{ padding: "0px" }}>
<ListItem
style={{ height: "80px" }}
primaryText={row.Description}
secondaryText={
<div>
<div>
{"Direction : " + row.EntryDirection + " > " + row.ExitDirection}
</div>
<div>{"Distance (meter) : " + row.Distance}</div>
</div>
}
secondaryTextLines={5}
/>
</TableRowColumn>
</TableRow>
))}
</TableBody>
</Table>
<hr />
</div>
</div>
);
}
您可以使用ListItem
的子组件: ListItemSecondaryAction
它提供了额外的操作元素,您可以在其中放置按钮,而不会受到主ListItem
单击事件的影响。
您可以将其作为名为children 的道具传递给ListItem
,但请注意:
如果使用 ListItemSecondaryAction,则它必须是最后一个子项。
参考:
样本来源:
<ListItem alignItems="flex-start" className={classes.listUnit} key={book.isbn}>
<ListItemAvatar>
<Avatar alt="Remy Sharp" src={url} />
</ListItemAvatar>
<ListItemText
primary={book.title}
secondary={
<>...</>
}
/>
<ListItemSecondaryAction>
<Tooltip title="Add to order" aria-label="add">
<IconButton edge="end" aria-label="comments">
<AddIcon />
</IconButton>
</Tooltip>
</ListItemSecondaryAction>
</ListItem>;
如果您不想使用 Material-UI 内部解决方案。
您可以简单地在父事件处理程序回调中添加一些自定义进程。
使用stopPropagation()来防止子事件,然后在 child 上添加一个单独的点击事件就可以了。
Event 接口的
stopPropagation()
方法可防止当前事件在捕获和冒泡阶段进一步传播。
event.stopPropagation();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.