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

如何在MUI DatePicker v6的slotProps中为TextField传递onBlur与sx属性

解决MUI DatePicker v6中给TextField添加onBlur和sx属性的问题

你可以直接在slotProps.textField配置对象中添加onBlur回调函数和sx样式对象,写法和已有的helperText、error等属性完全一致。以下是修改后的完整组件代码:

/* eslint-disable no-unused-vars */
// @ts-nocheck
import * as React from 'react';
import { Controller } from 'react-hook-form';
import TextField from '@mui/material/TextField';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import './common.css';
import { DatePicker, LocalizationProvider } from '@mui/x-date-pickers';
export const CustomDatePicker = (props) => {
  const { control, name, label } = props;
  const [error, setError] = React.useState(null);
  return (
    <Controller
      name={name}
      control={control}
      render={({ field: { onChange, value, ref, onBlur: fieldOnBlur }, fieldState: { error } }) => (
        <LocalizationProvider dateAdapter={AdapterDayjs}>
          <DatePicker
            size="small"
            name={name}
            label={label}
            control={control}
            format="DD-MMM-YYYY"
            value={value}
            onChange={(event) => {
              onChange(event);
            }}
            disableFuture
            sx={{ width: props.width ?? 250 }}
            InputProps={{
              style: {
                padding: 8
              }
            }}
            disableMaskedInput
            slotProps={{
              textField: {
                helperText: error?.message,
                error: error?.message ? true : false,
                size: 'small',
                readOnly: true,
                // 添加sx样式
                sx: {
                  '& .MuiOutlinedInput-root': {
                    '&:hover fieldset': {
                      borderColor: '#1976d2',
                    },
                    '&.Mui-focused fieldset': {
                      borderWidth: 2,
                    }
                  },
                  marginTop: 1
                },
                // 添加onBlur回调
                onBlur: (e) => {
                  // 执行自定义逻辑
                  console.log('TextField失去焦点', e.target.value);
                  // 若需要触发react-hook-form的字段校验,调用fieldOnBlur
                  fieldOnBlur(e);
                }
              }
            }}
          />
        </LocalizationProvider>
      )}
    />
  );
};
export default CustomDatePicker;

关键说明:

  • onBlur配置:从Controller的field对象中解构出fieldOnBlur,在自定义回调里可先执行业务逻辑,再调用fieldOnBlur触发react-hook-form的失焦校验(不需要的话可只保留自定义逻辑)。
  • sx配置:直接传入符合MUI sx语法的对象即可,示例中设置了输入框hover和聚焦时的边框样式、组件上边距,可根据需求调整规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:58:25