【发布时间】:2019-02-15 17:45:55
【问题描述】:
我在“redux-form”旁边使用“react-datepicker”,我在控制台中不断收到此错误...
Warning: Failed prop type: Invalid prop `selected` of type `String` supplied to `DatePicker`, expected instance of `Date`.
“react-datepicker”的新版本没有使用“moment()”所以我找到的解决方案不起作用。
这是我的表单组件的样子...
import React, { Component } from "react";
import { compose } from "redux";
import { connect } from "react-redux";
import { reduxForm, Field } from "redux-form";
import DateInput from "../../form/DateInput";
import { subDays } from "date-fns";
import {
combineValidators,
isRequired
} from "revalidate";
class SignUpForm extends Component {
onFormSubmit = values => {
console.log(values);
};
render() {
const { invalid, submitting, pristine } = this.props;
return (
<form onSubmit={this.props.handleSubmit(this.onFormSubmit)}>
<Field
name="birthdate"
component={DateInput}
label="Birth Date"
dateFormat="yyyy-MM-dd"
showMonthDropdown
showYearDropdown
dropdownMode="select"
maxDate={subDays(new Date(), 366 * 18)}
showDisabledMonthNavigation
/>
<Button
disabled={invalid || submitting || pristine}
type="submit"
size="big"
theme="black"
>
Sign In
</Button>
</form>
);
}
}
const validate = combineValidators({
birthdate: isRequired({ message: "Please choose your date of birth." })
});
export default compose(
connect(
null,
actions
),
reduxForm({ form: "signupForm", enableReinitialize: true, validate })
)(SignUpForm);
下面是“DateInput”组件的样子......
import React from "react";
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
const DateInput = ({
input: { value, onChange, ...restInput },
label,
meta: { touched, error, dirty },
...props
}) => {
let groupClasses = touched && !!error ? "input-group error" : "input-group";
return (
<div className={groupClasses}>
<DatePicker
{...props}
selected={value ? value : null}
onChange={onChange}
{...restInput}
/>
{touched && !!error && <span className="error">{error}</span>}
</div>
);
};
export default DateInput;
任何帮助将不胜感激。
【问题讨论】:
-
您也可以尝试从
input属性中解构selected,并将其作为selected={new Date(selected)}提供给DatePicker,看看是否可行。 -
我觉得你得
parseredux-form 组件输出:parse={(dateString) => new Date(dateString)} -
@Tholle 破坏了应用程序 :(
-
您是否尝试过添加
placeHolderText属性?placeholderText="MM/DD/YYYY" -
@ageoff 这与“Samuel Vaillant”答案的效果相同,即当我控制台的值时,有时日期会像这样“生日:1984 年 3 月 6 日星期二 00:00:00 GMT+0200(东欧标准时间){}”,当我选择另一个日期时,它会变成这样的“生日:“1984-03-09”,这很奇怪。
标签: reactjs redux redux-form react-datepicker