Mel*_*Mel 5 reactjs react-datepicker formik
我正在尝试以Formik形式使用react-datepicker。
我有:
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
class Fuate extends React.Component {
state = {
dueDate: new Date()
}
<Formik
initialValues={initialValues}
validationSchema={Yup.object().shape({
title: Yup.string().required("A title is required "),
})}
onSubmit={this.handleSubmit}
render={({
errors,
status,
touched,
setFieldValue,
setFieldTouched,
handleChange,
handleBlur,
handleSubmit,
isSubmitting,
dirty,
values
}) => {
return (
<div>
...
<DatePicker
name={'dueDate'}
value={values['dueDate']}
onChange={e => setFieldValue('dueDate', e)}
/>
<DatePicker
style={{ width: 180 }}
date={values.dueDate}
mode="date"
format="YYYY-MM-DD"
minDate={Date.now.toString()}
maxDate="2050-06-01"
confirmBtnText="Confirm"
cancelBtnText="Cancel"
showIcon={false}
customStyles={{
dateInput: {
marginLeft: 0,
borderColor: "#fff"
}
}}
onDateChange={date => setFieldValue("dueDate", date)}
onTouch={setFieldTouched}
/>
Run Code Online (Sandbox Code Playgroud)
对于这两个选项,表单都会呈现,我可以在日历上选择一个日期,但它不会出现在框中,并且状态值不会随选择内容而更新。
控制台中没有错误,但警告显示:
从v2.0.0-beta.1开始,date-fns不接受字符串作为参数。请使用
parseISO解析字符串。参见:toDate @ index.js:45
我试图使初始状态:
dueDate: new Date().toISOString(),
Run Code Online (Sandbox Code Playgroud)
但这没什么区别。
我已经看过很多关于使用Antd的日期选择器进行设置的帖子,但是找不到有关如何使用react-datepicker进行操作的说明。
Too*_*eve 48
更新Dani Vijay 的回答。
这种用途useField并useFormikContext从Formik V2,简化了组件的使用。
日期选择器.jsx:
import React from "react";
import { useField, useFormikContext } from "formik";
import DatePicker from "react-datepicker";
export const DatePickerField = ({ ...props }) => {
const { setFieldValue } = useFormikContext();
const [field] = useField(props);
return (
<DatePicker
{...field}
{...props}
selected={(field.value && new Date(field.value)) || null}
onChange={val => {
setFieldValue(field.name, val);
}}
/>
);
};
Run Code Online (Sandbox Code Playgroud)
用法(请参阅 Dani 对完整表格声明的回答):
...
<DatePickerField name="date" />
...
Run Code Online (Sandbox Code Playgroud)
Dan*_*jay 11
react- datepicker可以通过setFieldValue与Formik一起使用,
const DatePickerField = ({ name, value, onChange }) => {
return (
<DatePicker
selected={(value && new Date(value)) || null}
onChange={val => {
onChange(name, val);
}}
/>
);
};
const App = () => (
<Formik
initialValues={{ date: "" }}
...
>
{props => {
const {
values,
handleSubmit,
setFieldValue
...
} = props;
return (
<form onSubmit={handleSubmit}>
<DatePickerField
name="date"
value={values.date}
onChange={setFieldValue}
/>
...
Run Code Online (Sandbox Code Playgroud)
CodeSandbox演示在这里
| 归档时间: |
|
| 查看次数: |
4243 次 |
| 最近记录: |