You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MUI v5自定义Select变体触发TypeError: 无法读取undefined的'ref'属性

MUI v5自定义Select变体触发"Cannot read properties of undefined (reading 'ref')"错误的解决办法

问题详情

给MUI v5的Select组件添加自定义变体时,触发以下错误:

TypeError: Cannot read properties of undefined (reading 'ref')
    at Select (/var/www/miniatureawards.com/node_modules/@mui/material/Select/Select.js:119:74)
    at renderWithHooks (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5658:16)
    at renderForwardRef (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:5842:18)
    at renderElement (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6005:11)
    at renderNodeDestructiveImpl (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6104:11)
    at renderNodeDestructive (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14)
    at renderNode (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6259:12)
    at renderChildrenArray (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6211:7)
    at renderNodeDestructiveImpl (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6141:7)
    at renderNodeDestructive (/var/www/miniatureawards.com/node_modules/react-dom/cjs/react-dom-server.browser.development.js:6076:14)
error - TypeError: Cannot read properties of undefined (reading 'ref')

相关配置与代码如下:

theme.js 自定义变体配置

MuiSelect: {
  variants: [
    {
      props: { variant: 'topNav' },
      style: {
        textTransform: 'none',
      },
    },
  ],
  styleOverrides: {
    root: {
      border: 0,
      '&::before, &::after': {
        border: 0,
        display: 'none',
      },
    },
  },
},

组件调用代码

<Select
  variant="topNav"
>
  <MenuItem value="-1">All Categories</MenuItem>
</Select>

移除variant="topNav"属性后,错误消失:

<Select>
  <MenuItem value="-1">All Categories</MenuItem>
</Select>

原因

MUI v5的Select组件不支持通过variants字段自定义variant属性值,官方仅预设了"outlined"、"filled"、"standard"三个合法的variant值。传入非内置的自定义值会导致组件内部逻辑异常,触发ref读取失败的错误。

解决方案

放弃自定义variant的方式,改用以下两种替代方案:

方案1:自定义className + 主题样式覆盖

在主题中针对自定义类名配置样式:

// theme.js
MuiSelect: {
  styleOverrides: {
    root: {
      border: 0,
      '&::before, &::after': {
        border: 0,
        display: 'none',
      },
    },
    // 自定义类名对应的样式
    topNav: {
      textTransform: 'none',
    },
  },
},

组件调用时添加className:

<Select
  className="topNav"
>
  <MenuItem value="-1">All Categories</MenuItem>
</Select>

方案2:用styled工具封装自定义组件

通过MUI的styled工具创建专属的Select组件:

import { styled } from '@mui/material/styles';
import Select from '@mui/material/Select';

const TopNavSelect = styled(Select)(({ theme }) => ({
  textTransform: 'none',
  border: 0,
  '&::before, &::after': {
    border: 0,
    display: 'none',
  },
}));

// 使用自定义组件
<TopNavSelect>
  <MenuItem value="-1">All Categories</MenuItem>
</TopNavSelect>

内容的提问来源于stack exchange,提问作者Jamie Hutber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:45:54