Я использую библиотеку реагировать-mui в своем проекте, где я хотел бы реализовать компонент MenuList
, находящийся в составе MenuList здесь . В моем приложении я посылаю 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, у которого есть список меню, открывается не в том месте, которое вы можете увидеть в примере CodeSanbox, если нажать на 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
?