[英]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>
);
}
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>
);
}
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.