嵌套菜单位于主菜单旁边。(React,Material UI)

时间:2020-03-26 12:24:31

标签: reactjs menu material-ui

我正在使用Material v0.19.4进行React项目。 我使用popover组件放置了嵌套菜单。它在桌面显示模式下效果很好,但在移动模式下,嵌套菜单位于主菜单旁边。 我认为它与zIndex有关,但是我不确定如何解决此问题。

这是我的代码段。

<IconMenu
            iconButtonElement={
                <IconButton>
                    <FilterListIcon />
                </IconButton>
            }
            anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}
            targetOrigin={{ horizontal: 'left', vertical: 'top' }}
            open={p.open}
            onRequestChange={(open: boolean, reason: string) => {
                console.log(reason)
                if (reason === 'clickAway') {
                    p.setOpen(false)
                    p.setActiveMenuItem('')
                }
            }}
        >
            {Object.keys(p.filterTypes).map(filterType => {
                const filterTypeObj = getInSafe(
                    p,
                    o => o.filterTypes[filterType],
                    {}
                )
                if (filterTypeObj.filterTypeType === 'id') {
                    return (
                        <MenuItem
                            key={`filter-dropdown-${filterType}`}
                            primaryText={formatName(
                                filterTypeObj.filterTitle || filterType
                            )}
                            rightIcon={<ArrowDropRight />}
                            onClick={(ev: MouseEvent) => {
                                ev.preventDefault()
                                p.setActiveMenuItem(filterType)
                                p.setActiveMenuElement(ev.currentTarget)
                            }}
                        >
                            {p.activeMenuItem === filterType && (
                                <Popover
                                    open={true}
                                    anchorEl={p.activeMenuElement}
                                    anchorOrigin={{
                                        horizontal: 'right',
                                        vertical: 'top',
                                    }}
                                    targetOrigin={{
                                        horizontal: 'left',
                                        vertical: 'top',
                                    }}
                                    style={{ zIndex: 3000 }}
                                    z
                                >
                                    <Menu>
                                        {filterTypeObj.availableFilters
                                            .sort((a, b) =>
                                                getInSafe(
                                                    a,
                                                    o =>
                                                        o.title.localeCompare(
                                                            b.title
                                                        ),
                                                    0
                                                )
                                            )
                                            .map(filter => (
                                                <MenuItem
                                                    key={`type-id-dropdown-${filter.id}`}
                                                    primaryText={filter.title}
                                                    onClick={() => {
                                                        p[
                                                            `update${filterType}`
                                                        ](
                                                            filter,
                                                            filter.idValue
                                                        )
                                                        p.setOpen(false)
                                                        p.setActiveMenuItem('')
                                                    }}
                                                />
                                            ))}
                                    </Menu>
                                </Popover>
                            )}
                        </MenuItem>
                    )
                }
                if (filterTypeObj.filterTypeType === 'enum') {
                    return (
                        <MenuItem
                            key={`filter-dropdown-${filterType}`}
                            primaryText={formatName(
                                filterTypeObj.filterTitle || filterType
                            )}
                            rightIcon={<ArrowDropRight />}
                            onClick={(ev: MouseEvent) => {
                                ev.preventDefault()
                                p.setActiveMenuItem(filterType)
                                p.setActiveMenuElement(ev.currentTarget)
                            }}
                        >
                            {p.activeMenuItem === filterType && (
                                <Popover
                                    open={true}
                                    anchorEl={p.activeMenuElement}
                                    anchorOrigin={{
                                        horizontal: 'right',
                                        vertical: 'top',
                                    }}
                                    targetOrigin={{
                                        horizontal: 'left',
                                        vertical: 'top',
                                    }}
                                    style={{ zIndex: 3000 }}
                                >
                                    <Menu>
                                        {filterTypeObj.availableFilters.map(
                                            filter => (
                                                <MenuItem
                                                    key={`type-enum-dropdown-${filter.id}`}
                                                    primaryText={formatName(
                                                        filter.title
                                                    )}
                                                    onClick={() => {
                                                        p[
                                                            `update${filterType}`
                                                        ](filter.enum)
                                                        p.setOpen(false)
                                                        p.setActiveMenuItem('')
                                                    }}
                                                />
                                            )
                                        )}
                                    </Menu>
                                </Popover>
                            )}
                        </MenuItem>
                    )
                }
                return null
            })}
        </IconMenu>

enter image description here

0 个答案:

没有答案
相关问题