简体   繁体   English

Material-UI 选择器会触发模糊验证而不是更改?

[英]Material-UI pickers trigger validation on blur not on change?

As soon as you start typing inside the DatePicker component, the validation is triggered.一旦您开始在 DatePicker 组件中输入,就会触发验证。

How does one trigger validation on blur instead of onInputChange when using使用时如何触发模糊验证而不是 onInputChange

@material-ui/pickers meant for material-ui v4 @material-ui/pickers用于material-ui v4

Passing the value to the blur function should work and omitting on change, but as soon as you remove the onChange event the code breaks.将值传递给模糊函数应该可以工作并忽略更改,但是一旦删除 onChange 事件,代码就会中断。

Example例子

export default function MaterialUIPickers() {
  const [selectedDate, setSelectedDate] = React.useState();

  const handleDateChange = (date) => {
    setSelectedDate(date);
  };

  const handleBlur = (e) => {
    setSelectedDate(e.target.value);
  };

  return (
    <MuiPickersUtilsProvider utils={DateFnsUtils}>
      <KeyboardDatePicker
        id="date-picker-dialog"
        format="MM/dd/yyyy"
        value={selectedDate}
        onChange={handleDateChange}
        onBlur={handleBlur}
      />
    </MuiPickersUtilsProvider>
  );
}

Muiv4 documentation Muiv4 文档

Stackblitz example Stackblitz 示例

Since onChange is mandatory returning undefined in the callback solves the issue but breaks the datePicker select option (does not apply the selected date to the input field).由于onChange是强制性的,在回调中返回undefined解决了这个问题,但破坏了 datePicker 选择选项(不将所选日期应用于输入字段)。

Because of the above, onAccept should be used thereby internal state logic can be omitted which is crucial.由于上述原因,应该使用onAccept从而可以省略内部状态逻辑,这是至关重要的。

Code代码

export default function MaterialUIPickers() {
  const [selectedDate, setSelectedDate] = React.useState();

  const handleBlur = (e) => {
    setSelectedDate(e.target.value);
  };

  return (
    <MuiPickersUtilsProvider utils={DateFnsUtils}>
      <KeyboardDatePicker
        id="date-picker-dialog"
        format="MM/dd/yyyy"
        value={selectedDate}
        onChange={()=>undefined}
        onAccept{setSelectedDate}
        onBlur={handleBlur}
      />
    </MuiPickersUtilsProvider>
  );
}

Stackblitz 闪电战

The onChange is required, per the documentation .根据文档onChange是必需的。 However, you don't need to set the value in onChange .但是,您不需要在onChange设置value If you omit the setSelectedDate in that function and instead only do it in onBlur , the date setting and validation will only occur with the blur event.如果您在该函数中省略setSelectedDate而只在onBlur ,则日期设置和验证将仅在blur事件中发生。

 export default function MaterialUIPickers() { const [selectedDate, setSelectedDate] = React.useState(); const [wasOpened, setWasOpened] = React.useState(); const handleDateChange = (date) => { if (wasOpened) { setSelectedDate(date); } }; const handleBlur = (e) => { setSelectedDate(e.target.value); }; const handleOnOpen = () => { setWasOpened(true); }; const handleOnClose = () => { setWasOpened(false); }; return ( <MuiPickersUtilsProvider utils={DateFnsUtils}> <KeyboardDatePicker id="date-picker-dialog" variant="inline" format="MM/dd/yyyy" value={selectedDate} onChange={handleDateChange} onBlur={handleBlur} autoOk={true} onOpen={handleOnOpen} onClose={handleOnClose} /> </MuiPickersUtilsProvider> ); }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Material-UI:如何将两个日期选择器放在同一行上? - Material-UI: How to put two Date Pickers on same line? 如何防止 material-ui/pickers 中的下划线和斜线符号? - How to prevent underline and slash symbols in material-ui/pickers? 如何删除日历@material-ui/pickers 中的默认选定日期? - How to remove default selected date in Calendar @material-ui/pickers? "我的问题是关于 material-ui 4,material-ui\/pickers compaiing 的不存在的“mask”属性" - My question is about material-ui 4, material-ui/pickers compaining of inexistent "mask" property Material UI React - 找不到模块:无法解析“@material-ui/pickers” - Material UI React - Module not found: Can't resolve '@material-ui/pickers' Material-UI:以编程方式触发悬停效果 - Material-UI: Trigger hover effect programmatically 使用 Material-UI 反应钩子表单验证 - React hook form validation with Material-UI 反应:出现 Material-UI 对话框时模糊背景 - React: Blur background when Material-UI Dialog appeared 如何更改 KeyboardTimePicker (material-ui-pickers) 中的图标? - How can I change icon in the KeyboardTimePicker (material-ui-pickers)? 有没有人有使用@material-ui/pickers 日历 API 的经验? - Does anyone have any experience working with the @material-ui/pickers Calendar API?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM