【发布时间】:2019-11-18 16:38:27
【问题描述】:
我在我的项目中使用react-mui 库,我想在其中实现一个MenuList 组件,该组件位于MenuList 组合here 下。在我的应用程序中,虽然我将ref 作为prop 发送到child component,但我有一个menu。您可以查看代码框示例here。
当我从这样的父组件以props 发送ref 和setRef 方法时:
state = {
open: false,
ref: React.createRef()
};
setRef = element => {
this.setState({ ref: element });
};
handleToggle = () => {
this.setState(state => ({ open: !state.open }));
};
handleClose = () => {
this.setState({ open: false });
};
render() {
return (
<MenuListComposition
setRef={this.setRef}
handleToggle={this.handleToggle}
handleClose={this.handleClose}
open={this.state.open}
ref={this.state.ref}
/>
);
}
到具有菜单按钮的子组件:
<MenuButton
className={classes.button}
handleToggle={handleToggle}
setRef={setRef}
open={open}
ref={ref}
/>
然后有一个菜单列表的 Popper 组件在错误的位置打开,如果你点击 TOGGLE MENU GROW button,你可以在 codesanbox 示例中看到。
<Popper open={open} anchorEl={ref} transition disablePortal>
{({ TransitionProps, placement }) => (
<Grow
{...TransitionProps}
id="menu-list-grow"
style={{
transformOrigin:
placement === "bottom" ? "center top" : "center bottom"
}}
>
<Paper>
<ClickAwayListener onClickAway={handleClose}>
<MenuList>
<MenuItem onClick={handleClose}>Profile</MenuItem>
<MenuItem onClick={handleClose}>My account</MenuItem>
<MenuItem onClick={handleClose}>Logout</MenuItem>
</MenuList>
</ClickAwayListener>
</Paper>
</Grow>
)}
</Popper>
我做错了什么以及如何解决这个问题,或者我如何在stateless 组件中使用ref 以避免将ref 作为prop 发送?
【问题讨论】:
标签: javascript reactjs react-material react-ref