我正在使用react-final-form和react-datepicker。我也有一年的选择。开始日期和结束日期应设置为默认年份的1月1日和12月31日。选择新的一年后,我想重置表格,清除两个日期选择器的选定日期和输入值,并将它们分别设置为选定年份的1月1日和12月31日。
这是我的密码和框https://codesandbox.io/s/react-datepicker-clear-cxlxh的链接。
到目前为止,我有一个用于react-datepicker的自定义组件,该组件可与react-final-form一起使用。开始日期和结束日期设置为默认年份的1月1日和12月31日。
DatePicker组件:
const DatePickerWrapper = props => {
const { input, label, minDate, maxDate } = props;
const [startDate, setStartDate] = useState(input.value);
return (
<div>
<label>{label}</label>
<DatePicker
selected={startDate}
minDate={minDate}
maxDate={maxDate}
onChange={value => {
setStartDate(value);
props.input.onChange(value);
}}
onBlur={props.input.onBlur}
onFocus={props.input.onFocus}
value={props.input.value}
/>
</div>
);
};
使用它的字段:
<Field
name="startDate"
initialValue={isoDate(minDate(values.year.value))}
component={DatePickerWrapper}
minDate={minDate(values.year.value)}
maxDate={
values.endDate ? values.endDate : maxDate(values.year.value)
}
/>
这是我用来重置表格的组件:
<Field name="year" subscription={{}}>
{({ input: { onChange } }) => (
<OnChange name="year">
{value => {
form.reset({
...initialValues,
year: value
});
}}
</OnChange>
)}
</Field>
所以我的问题是:
clear()
function,但我无法使其正常工作。initialValue
,并且表单的值已更新。但是输入的值保持不变。答案 0 :(得分:1)
表格中的问题很少。
This is causing the render to go into infinite loop
。已将所有表单初始化移至对象顶部const initialValues = {
year: { value: "2019", label: "2019" },
startDate: isoDate(minDate("2019")),
endDate: isoDate(maxDate("2019")),
amount: ""
};
form.reset
时,可以在该位置重置开始日期和结束日期的值form.reset({
...initialValues,
year: value,
startDate: isoDate(minDate(value.value)),
endDate: isoDate(maxDate(value.value))
});
我已经更新了Sandbox中的代码。
看看它,让我知道是否有任何遗漏或有任何疑问。