我正在尝试在react-datepicker组件中实施限制或验证。我使用redux-form进行验证和规范化(实现限制)
https://redux-form.com/6.0.0-rc.1/examples/normalizing/
问题:我发现当我们尝试在字段中输入内容时,调用redux-form的规范化函数和验证函数都不会被调用
虽然我们提交表单时未提交此值,但我需要显示一些验证错误或限制用户输入无效字符。
我为日期选择器组件创建了一个包装器,并通过redux字段
在我的表单中使用它我的日期选择器组件: -
return (
<div className={"render-date-picker "}>
<div className="input-error-wrapper">
{(input.value) ? <label> {placeholder} </label> : ''}
<DatePicker className="input form-flow" {...input}
placeholderText={placeholder}
selected={input.value ? moment(input.value) : null}
maxDate={maxDate || null}
minDate={minDate || null}
dateFormat={isTimePicker ? "LLL" : "DD/MM/YYYY"}
showYearDropdown
showMonthDropdown
disabledKeyboardNavigation
/>
{touched && error && <span className="error-msg">{t(error)}</span>}
<span className="bar" style={{ 'display': this.state.is_focus ? 'block' : 'none' }} ></span>
</div>
</div>
);
redux表单字段: -
<Field
name="date_of_birth"
type="text"
className="input form-flow extra-padding-datepicker"
component={RenderDatePicker}
maxDate={moment().subtract(18, "years")}
validate={[required, dateOfBirth]}
normalize={isValidDateFormat}
placeholder={t("DOB (DD/MM/YYYY)")}
/>
我的规范化功能: -
export const isValidDateFormat = (value, previousValue) => {
if (value == null || !value.isValid()) {
return previousValue;
}
return value;
}
答案 0 :(得分:2)
react-datepicker提供 onChangeRaw 属性以获取datePicker中的原始(类型)值。为了限制或验证datepicker输入字段,我们需要在datepicker组件的onChange事件中不可用的原始值。
它返回一个时刻对象。
为了获得原始值,我们使用 onChangeRaw
原始值只能从e.target.value获得。 在我的例子中,我只是通过一个简单的函数限制用户在datepicker输入字段中输入任何内容: -
handleChangeRaw = (date) => {
let s=document.getElementById(date_picker_id)
s.value =moment(this.props.input.value).format("DD/MM/YYYY");
}
我的datepicker组件: -
<DatePicker
.....
disabledKeyboardNavigation
onChangeRaw={(e)=>this.handleChangeRaw(e)}
id={date_picker_id}
.....
/>
这解决了我的问题。希望它有用:)