【发布时间】:2019-10-21 16:00:56
【问题描述】:
- 当我单击文本框文本时,应该会打开一个带有文本框的弹出菜单。
- 同样,当我单击右侧角落的过滤器图标时,应该会打开一个带有复选框列表的菜单。
- 但现在发生的情况是,当我点击这两个地方时,两个菜单都打开了。
- 只能从一个位置打开一个菜单。
- 我通过放置控制台进行调试。问题出在以下方法
`const handleClick = event => { setAnchorEl(event.currentTarget); };
const handleClickFilter = event => { setAnchorEl(event.currentTarget); };`
- 你能告诉我如何解决它吗?
- 在下面提供我的代码 sn-p 和沙箱。
https://codesandbox.io/s/material-demo-kpt5i
const handleClick = event => {
setAnchorEl(event.currentTarget);
};
const handleClickFilter = event => {
setAnchorEl(event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
const handleCloseFilter = () => {
setAnchorEl(null);
};
<Typography variant="h6" id="tableTitle" onClick={handleClickFilter}>
text box
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleCloseFilter}
>
<MenuItem onClick={handleCloseFilter}>
<form
className={classes.container}
noValidate
autoComplete="off"
>
<TextField
id="standard-name"
label="Name"
className={classes.textField}
// value={values.name}
// onChange={handleChange('name')}
margin="normal"
/>
</form>
</MenuItem>
</Menu>
</Typography>
<Tooltip title="Filter list">
<IconButton aria-label="filter list">
<FilterListIcon onClick={handleClick} />
<Menu
id="simple-menu"
anchorEl={anchorEl}
keepMounted
open={Boolean(anchorEl)}
onClose={handleClose}
>
<MenuItem onClick={handleClose}>
<Checkbox
onChange={handleColumnHide}
inputProps={{ "aria-label": "select all desserts" }}
value="name"
/>
Dessert
</MenuItem>
<MenuItem onClick={handleClose}>
<Checkbox
onChange={handleColumnHide}
inputProps={{ "aria-label": "select all desserts" }}
value="calories"
/>
Calories
</MenuItem>
<MenuItem onClick={handleClose}>
<Checkbox
onChange={handleColumnHide}
inputProps={{ "aria-label": "select all desserts" }}
/>
Fat
</MenuItem>
【问题讨论】:
-
锚点的工作方式是,您需要根据要显示的菜单设置不同的锚点。由于您的两个菜单都引用了相同的 achor 变量,因此一旦该变量设置了值,Menu 组件就会认为它正在被切换。尝试使用两个不同的锚点(每个菜单一个)并将它们分别存储在您的状态中。这样每个菜单都有自己的锚点。
-
嘿,你能不能在我的沙箱里更新这么混乱:(
标签: javascript html reactjs redux material-ui