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

React MUI @mui/x-date-pickers 6.0.3选中日期颜色异常求助

解决@mui/x-date-pickers 6.0.3 DatePicker选中日期样式异常问题

问题分析

你遇到的问题根源是:日历弹窗重新打开时,选中日期会自动获得焦点,MUI默认的focus状态样式优先级高于自定义的选中样式,导致自定义颜色被覆盖,点击其他区域失去焦点后才恢复正常显示。

解决方案

方案1:全局主题定制(推荐)

通过createTheme全局配置MuiPickersDay组件的选中状态样式,覆盖所有相关状态(包括focus、active),确保样式优先级足够:

import { createTheme, ThemeProvider } from '@mui/material/styles';
import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import dayjs from 'dayjs';
import { useState } from 'react';

// 创建自定义主题
const customTheme = createTheme({
  components: {
    MuiPickersDay: {
      styleOverrides: {
        root: {
          '&.Mui-selected': {
            backgroundColor: '#2196f3', // 替换为你的自定义颜色
            color: '#ffffff',
            '&:hover': {
              backgroundColor: '#1976d2', // 自定义hover颜色
            },
            // 强制覆盖focus状态(解决弹窗打开时的样式异常核心)
            '&.Mui-selected:focus': {
              backgroundColor: '#2196f3',
            },
            '&.Mui-selected:active': {
              backgroundColor: '#2196f3',
            }
          }
        }
      }
    }
  }
});

function CustomDatePicker() {
  const [selectedDate, setSelectedDate] = useState(dayjs());

  return (
    <ThemeProvider theme={customTheme}>
      <LocalizationProvider dateAdapter={AdapterDayjs}>
        <DatePicker
          label="选择日期"
          value={selectedDate}
          onChange={(newVal) => setSelectedDate(newVal)}
        />
      </LocalizationProvider>
    </ThemeProvider>
  );
}

方案2:组件级SX属性定制

如果仅需给单个DatePicker定制样式,直接在组件sx属性中覆盖所有相关状态:

import { useState } from 'react';
import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import dayjs from 'dayjs';

function CustomDatePicker() {
  const [selectedDate, setSelectedDate] = useState(dayjs());

  return (
    <LocalizationProvider dateAdapter={AdapterDayjs}>
      <DatePicker
        label="选择日期"
        value={selectedDate}
        onChange={(newVal) => setSelectedDate(newVal)}
        sx={{
          '& .MuiPickersDay-root.Mui-selected': {
            backgroundColor: '#2196f3',
            color: '#fff',
            // 必须覆盖focus状态
            '&:focus': {
              backgroundColor: '#2196f3',
            },
            '&:hover': {
              backgroundColor: '#1976d2',
            }
          }
        }}
      />
    </LocalizationProvider>
  );
}

额外检查点

确保正确绑定value和onChange属性,组件状态同步是样式正常显示的基础,避免因状态不同步导致的样式异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:27:34