【问题标题】:Temporary Navigation bar not closing after clicking on a icon button reactjs单击图标按钮reactjs后临时导航栏未关闭
【发布时间】:2020-03-25 10:55:21
【问题描述】:

我从 material-ui 网站创建了一个导航栏,并且我有一个 onClick,当用户单击图标按钮时,导航将被重定向到新页面,我希望导航随后关闭。我尝试了不同的东西,但由于某种原因它不会关闭。 它现在唯一要做的就是重定向到一个新页面,并且导航抽屉继续保持打开状态。

我有一个名为 handleDrawerClose() 的函数来关闭抽屉,一个名为 navigation 的 const 用于创建文本和组件,我创建了一个名为 handleNavigation 的 const 来推送链接,从而使页面重定向。有没有办法以某种方式调用这两者。谢谢你。

下面是我的代码:

    const navigation = [
        { to: '/', text: 'Upload', Icon: InboxIcon },
        { to: '/email', text: 'Send', Icon: MailIcon }
    ]

    const NavLinks = ({ links, onClick }) => {

        const _onClick = to => () => onClick(to);

        return (
            <List>
                {links.map(({ to, text, Icon }) => (
                    <ListItem key={to} button onClick={_onClick(to)}>
                        <ListItemIcon>
                            <Icon />
                        </ListItemIcon>
                        <ListItemText primary={text} />
                    </ListItem>
                ))}
            </List>
        )
    }

    const IconArrow = ({ onClick }) => {

        return (
            <IconButton onClick={onClick}>
                <ChevronLeftIcon />
            </IconButton>
        )
    }

    export default withRouter(({ history }) => {
        const classes = useStyles();
        const [_, { logout }] = useAppAuth();
        const [open, setOpen] = React.useState(false);
        const [state, setState] = React.useState({
            left: false,
          });

        function handleDrawerOpen() {
            setOpen(true);
        }

        function handleDrawerClose() {
            setOpen(false);    
        }


        const handleNavigation = to => () => history.push(to);

    return (
            <Fragment>
                <AppBar position='static'>
                    <Toolbar className={classes.toolbar}>
                        <IconButton
                            color='inherit'
                            edge='start'
                            aria-label='open menu drawer'
                            onClick={handleDrawerOpen}
                        >
                            <MenuIcon />
                        </IconButton>

                        <Link to='/'>
                            <img alt='Logo' src={logo} className={classes.image} />
                        </Link>
                        <Typography variant='h6' className={classes.title}>
                            {process.env.REACT_APP_NAME}
                        </Typography>

                        <Tooltip title='Logout'>
                            <Link to='/login'>
                                <IconButton onClick={logout} className={classes.logout}>
                                    <LogoutIcon />
                                </IconButton>
                            </Link>
                        </Tooltip>
                    </Toolbar>
                </AppBar>

                <Drawer
                    className={classes.drawer}
                    variant='temporary'
                    anchor='left'
                    open={open}
                    >
                    <div className={classes.iconArrow}>
                        <IconArrow onClick={handleDrawerClose} />
                    </div>     

                    <Divider />

                    <NavLinks
                        links={navigation}
                        onClick={() => handleNavigation}
                    />
                </Drawer>
            </Fragment>
        )
    })

【问题讨论】:

    标签: javascript reactjs material-ui jsx


    【解决方案1】:

    为什么不在处理程序中关闭它?

    const handleNavigation = to => { 
      setOpen(false); // add this
      history.push(to);
    }
    

    【讨论】:

    • 很高兴我能帮上忙!如果您能支持我的答案并将其标记为正确答案,那就太好了,谢谢! :)
    猜你喜欢
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 2015-04-12
    • 2021-12-26
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多