【问题标题】:React - Material UI Menu not working properlyReact - 材质 UI 菜单无法正常工作
【发布时间】:2021-06-01 09:09:34
【问题描述】:

我正在使用材料 ui 中的菜单/菜单项。如果我尝试根据条件渲染它似乎有问题。参考下面...

const AddSelectItemButton = () => {
    return (
        <>
        <Fab 
            aria-controls="simple-menu" 
            aria-haspopup="true" 
            onClick={handleClick} 
            className={classes.addButton} 
            size="medium" 
            color="primary" 
            aria-label="add"
        >
            <AddIcon />
        </Fab>
        <Menu
            id="simple-menu"
            anchorEl={anchorEl}
            keepMounted
            open={Boolean(anchorEl)}
            onClose={handleClose}
        >
            <MenuItem onClick={handleDelete}>Delete Item</MenuItem>
            <MenuItem onClick={handleAddNew}>Add Item</MenuItem>
        </Menu>
        </>
    )
}

在主容器里面我有这样的东西

return (
    <div className='my-5'>
        <Paper className="pl-5 pr-5 pb-5 position-relative"> 
            <Typography className="pt-4 mb-4 text-center" variant="h4">My Items</Typography>
            {!isAuthMode &&
                <AddSelectItemButton />
            }
            <Grid container spacing={3} justify="center">
            {allItems.items.map(item=>
                <Grid key={item.id} item xs={5} className={`mt-4`} style={{height: '200px'}}>
                        <Card className={`${classes.root} d-flex ${classes.packInner}`}>
                            <CardActionArea className="d-flex">
                                <CardMedia
                                    className={`${classes.media} ${classes.cardImage}`}
                                    image={item.image}
                                    title={item.brand}
                                />
                                <CardContent className={classes.textContainer}>
                                    <Typography gutterBottom variant="subtitle1">
                                        {item.brand}
                                    </Typography>
                                    <Typography variant="body2" color="textSecondary">
                                        {item.name}
                                    </Typography>
                                    <Typography variant="body2" color="textSecondary">
                                        Weight: {item.weight}
                                    </Typography>
                                    <Typography variant="body2" color="textSecondary" className={classes.itemDescription}>
                                        {packInfo.description.length > 80 ?
                                            (`${packInfo.description.substring(0, 77) + '...'}`)
                                            :
                                            packInfo.description
                                        }
                                    </Typography>
                                </CardContent>
                            </CardActionArea>
                        </Card>
                </Grid>
            )}
            </Grid>
        </Paper>
    </div>
);

如果我不执行条件并将代码包含在原始渲染中。菜单在按钮的位置加载。使用该条件,它会呈现页面的最左上角,而不是按钮。

有人有想法或需要更多信息吗?

谢谢!

【问题讨论】:

  • 为什么需要条件渲染?
  • @radovix 我想​​在不处于身份验证模式时使用相同的组件隐藏此按钮。
  • 能否请您添加整个组件的代码(包括回调和其他东西)?

标签: javascript reactjs material-ui


【解决方案1】:
{!isAuthMode && (
  <AddSelectItemButton />
)} 

【讨论】:

  • 这对于帮助我重写我的条件内联很有用。但没有解决我的问题。我贴了一张它的样子。
  • 代码中是否还有其他元素使用该标志,isAuthMethod?
  • 尝试将 Typography 和 AddSelectItem 包装在 div 中。如果您使用 usestate hook 设置标志,它是异步的,并且有可能在所有其他 UI 之后呈现该组件
  • 我的项目 {!isAuthMode && }
  • @user1038449 没有其他元素使用它,而且 div 技巧也没有奏效:/
猜你喜欢
  • 2019-04-27
  • 2021-09-30
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-27
相关资源
最近更新 更多