【问题标题】:How to customize Material UI autocomplete dropdown menu如何自定义 Material UI 自动完成下拉菜单
【发布时间】:2021-10-09 12:41:29
【问题描述】:

我正在使用 Material UI v5 beta1 并且我一直在尝试自定义他们的自动完成组件,以便在选择项目时选项上的排版颜色从黑色变为白色,但是,我不知道如何通过它的风格。 到目前为止,我已经尝试通过样式组件或全局覆盖(参见附加代码)在.MuiAutocomplete-option 上传递我的样式,并尝试了我能想到的每个状态,悬停,选择,聚焦,甚至尝试了 Material 类,但没有其中有工作。我也尝试过使用带有 MenuList 的自定义 Popper,但没有运气。几天来,我一直在为此烦恼,并且无法检查 DOM 使事情变得更加困难,任何帮助或提示将不胜感激。 提前谢谢你。

MuiAutocomplete: {
    styleOverrides: {
        root: {
           // ...
        },
        option: {
            padding: '5px 12px',
            backgroundColor: theme.palette.background.paper,
            display: 'flex',
            height: 42,
            borderRadius: theme.borderRadius.s,

            '&:hover': {
                backgroundColor: theme.palette.action.hover,
                '& .Mui-Typography-root': { color: theme.palette.text.contrast },
            },

            '& .Mui-selected': {
                backgroundColor: theme.palette.action.hover,
                '& .Mui-Typography-root': { color: theme.palette.text.contrast },
            },

            '&.disabled': {
                opacity: 0.5,
                '& .Mui-Typography-root': {
                    color: theme.palette.text.disabled,
                },
            },
        },
renderOption={(props, option) => {
    return (
        <li {...props}>
            <Box display={'flex'} flexDirection={'row'}>
                <Avatar size={'32'} variant={'circular'} />
                <Box display={'flex'} ml={3} flexDirection={'column'}>
                    <Typography color={'text.primary'}>
                        {option.label}
                    </Typography>
                    <Typography color={'text.secondary'}>
                        Extra Information
                    </Typography>
                </Box>
            </Box>
        </li>
    );
}}

【问题讨论】:

    标签: javascript reactjs typescript autocomplete material-ui


    【解决方案1】:

    我会将{ selected } 传递给您的renderOption,然后使用它来切换您的内联样式

    例如:

    renderOption={(props, option, { selected }) => {
        return (
            <li {...props}>
                <Box display={'flex'} flexDirection={'row'} style={{ backgroundColor: selected ? 'red' : 'green' }}>
                    <Avatar size={'32'} variant={'circular'} />
                    <Box display={'flex'} ml={3} flexDirection={'column'}>
                        <Typography color={'text.primary'}>
                            {option.label}
                        </Typography>
                        <Typography color={'text.secondary'}>
                            Extra Information
                        </Typography>
                    </Box>
                </Box>
            </li>
        );
    }}
    
    

    【讨论】:

    • 也许我不是很清楚我想要实现的目标,比如说我没有选择带有复选标记的项目。我的意思是 Material UI 在使用向上和向下箭头导航或悬停在项目上时赋予项目的状态。 { selected } 属性不适用于我的情况
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2020-09-18
    相关资源
    最近更新 更多