我在我的项目中使用了一个react-mui库,我想在其中实现一个组件,可以在此处MenuList
的 MenuList 组合下找到。在我的应用程序中,虽然我将一个as发送到我有一个. 您可以在此处查看代码框示例。当我从这样的父组件发送一个和一个方法时:ref
prop
child component
menu
ref
setRef
props
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
.
<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>
我做错了什么以及如何解决这个问题,或者我如何ref
在一个stateless
组件中使用我可以避免ref
作为prop
.