css 如何在Drawer - Material UI中将菜单项设置为活动?

hgqdbh6s  于 2022-12-20  发布在  其他
关注(0)|答案(5)|浏览(146)

我有这个代码:

<Drawer 
                docked = {false}
                width = {330}
                open = {this.state.drawerOpen}
                onRequestChange = {(drawerOpen) => this.setState({drawerOpen})}
            >

                    <MenuItem primaryText="Inicio" onTouchTap = {this.drawerOpened} containerElement = {<Link to="/administrador/inicio"/>}/>
                    <MenuItem primaryText="Nueva Incidencia" onTouchTap = {this.drawerOpened} containerElement = {<Link to="/administrador/nueva_incidencia"/>}/>
                    <MenuItem primaryText="Incidencias Recibidas" onTouchTap = {this.drawerOpened} containerElement = {<Link to="/administrador/incidencias_recibidas"/>}/>
                    <MenuItem primaryText="Informes" /*onTouchTap = {() => this.currentPages('Informes')}*/onTouchTap = {this.drawerOpened} containerElement = {<Link to="/administrador/informes"/>}/>
            </Drawer>

我希望当我点击一个菜单项,它设置为'活动'(如在引导),与背景浅灰色和类似的风格。我怎么能做到这一点?问题是由于React路由器太,它卸载组件菜单和重新渲染它,所以状态不可用。
谢谢你。

djmepvbi

djmepvbi1#

在最新版本的Material UI中(当然在v4中),您可以使用selected属性,例如这是我的<ListItemLink>组件,我使用ListItem组件,但也可以使用MenuItem。

import PropTypes, { InferProps } from 'prop-types'
import React from 'react'
import { Link, useParams, useLocation } from 'react-router-dom'

function ListItemLink({ disabled = false, icon, primary, to }: InferProps<typeof ListItemLink.propTypes>) {
  const location = useLocation()

  const renderLink = React.useMemo(
    () => React.forwardRef<HTMLAnchorElement>((itemProps, ref) => <Link to={to} ref={ref} {...itemProps} />),
    [to],
  )

  return (
    <ListItem
      button
      selected={to === location.pathname}
      disabled={disabled ?? false}
      component={renderLink}
    >
      {icon ? <ListItemIcon>{icon}</ListItemIcon> : null}
      <ListItemText primary={primary} />
    </ListItem>
  )
}

ListItemLink.propTypes = {
  icon: PropTypes.element,
  primary: PropTypes.string.isRequired,
  to: PropTypes.string.isRequired,
  disabled: PropTypes.bool
}

ListItemLink.defaultProps = {
  disabled: false
}

如果您想在某个时候自定义默认的选定样式,只需在创建主题时覆盖它即可:

import { createMuiTheme } from '@material-ui/core/styles'
import { colors } from '@material-ui/core'

const theme = createMuiTheme({
  overrides: {
    MuiListItem: {
      root: {
        "&$selected": {
          color: colors.blue[500],
          backgroundColor: colors.lightBlue[100]
        }
      }
    }
  }
})

export default theme
wtzytmuj

wtzytmuj2#

以下是我的解决方法:
定义函数:
isActive =(值)=〉(位置.路径名===值?'活动':'')

<MenuItem primaryText="Inicio" onTouchTap = {this.drawerOpened} 
className={this.isActive('/administrador/inicio')}
containerElement = {<Link to="/administrador/inicio"/>}/>

现在你只是缺少了'active'的css样式。

vwhgwdsa

vwhgwdsa3#

在MenuItem周围创建一个 Package 器组件并接受style属性,然后将其应用于MenuItem,这怎么样?
这可能进一步有助于:Toggle background color of list on click react.js

vsdwdz23

vsdwdz234#

@jpnazar答案几乎是正确的。但是,containerElement属性不再起作用。现在可以使用上面的代码来指定链接。

import { Link } from 'react-router-dom';
import MenuItem from '@material-ui/core/MenuItem';

...

<MenuItem component={Link} to="/your-path">...</MenuItem>

检查. https://github.com/mui-org/material-ui/issues/204上的问题

bbmckpt7

bbmckpt75#

我不确定材质UI是否已经有一个参数可以用来设置活动状态,但是我找到了这个变通方法,它的工作原理类似于charm <ListItem key={item} sx={{ display: 'block', color: '#9A77CF', ...(window.location.pathname === "/selected pathname" && { backgroundColor: "#9A77CF", color: "#FFF", stroke: "#FFF"})}} >

相关问题