Dre*_*Big 7 javascript datepicker reactjs material-ui formik
我在 React 项目中使用 Formik 来处理表单并使用 MUI UI 组件。
我可以选择日期、月份,但年份部分不会改变。如果我在文本字段中手动输入年份,年份部分不会反映在更改的状态中。
这是我的代码:
<LocalizationProvider dateAdapter={DateAdapter}>
<DatePicker
name="birthday"
id="birthday"
variant="standard"
label="Birthday"
value={formik.values.birthday}
renderInput={(params) => (
<TextField {...params} variant="standard" fullWidth/>
)}
onChange={(value) => formik.setFieldValue('birthday', value, true)}
error={formik.touched.birthday && Boolean(formik.errors.birthday)}
helperText={formik.touched.birthday && formik.errors.birthday}
/>
</LocalizationProvider>
Run Code Online (Sandbox Code Playgroud)
初始状态:
const initialFormState = {
birthday: Date.now(),
};
Run Code Online (Sandbox Code Playgroud)
所有其他组件都正常工作,状态变化会立即显示。
该onChange属性未在DatePicker组件中设置。您必须将onChange财产从TextField移至DatePicker。
<LocalizationProvider dateAdapter={AdapterDateFns}>
<DatePicker
onChange={(value) => setFieldValue("birthday", value, true)}
value={values.birthday}
renderInput={(params) => (
<TextField
error={Boolean(touched.birthday && errors.birthday)}
helperText={touched.birthday && errors.birthday}
label="Birthday"
margin="normal"
name="birthday"
variant="standard"
fullWidth
{...params}
/>
)}
/>
</LocalizationProvider>
Run Code Online (Sandbox Code Playgroud)
另外,name、id、variant 和 label 都是TextField的属性。
这是有效的CodeSandbox链接。
对于 @mui-picker v6 我已经实现了这个解决方案
<LocalizationProvider dateAdapter={AdapterMoment}>
<DatePicker
disableFuture
label="Date"
format="DD/MM/YYYY"
value={formik.values.date}
onChange={(value) => formik.setFieldValue("date", value, true)}
slotProps={{
textField: {
variant: "outlined",
error: formik.touched.date && Boolean(formik.errors.date),
helperText: formik.touched.date && formik.errors.date
}
}}
/>
</LocalizationProvider>
Run Code Online (Sandbox Code Playgroud)
欲了解更多详情,请点击这里
| 归档时间: |
|
| 查看次数: |
14910 次 |
| 最近记录: |