如何在带有react-datepicker的withFormik字段中使用?

时间:2019-06-21 01:59:48

标签: reactjs formik react-datepicker

我正在尝试将我的dob数据从我的主类发送到子组件(RegisterAccount.jsx),并使用yup和withFormik字段在子组件上对其进行验证。问题是:

  1. 我无法进行yup或formik / yup来验证dob字段。
  2. 选择日期后,DatePicker不会在文本框中显示选择的值。

请检查以下代码:

这是我的Main.jsx类

// Some imports were removed to keep everything looks cleaner
import RegisterAccount from "RegisterAccount.jsx";

class Main extends React.Component {
     constructor(props) {
          super(props);

          this.state = {
             dob: ""
          }
     }

    render() {
        return (
            <Container fluid>
              <Switch>
                <Route exact path="/" render={() => <RegisterAccount data={this.state.dob} />} />
              </Switch>
            </Container>
        )
    }
}

export default Main;

这是我的RegisterAccount.jsx

// Some imports were removed to keep everything looks cleaner
import { Form as FormikForm, Field, withFormik } from "formik";
import * as Yup from "yup";
import DatePicker from "react-datepicker";


const App = ({ props }) => (
  <FormikForm className="register-form  " action="">
    <h3 className="register-title">Register</h3>
    <Form.Group className="register-form-group">
      <DatePicker
         tag={Field}
         selected={props.data.dob}
         onChange={(e, val) => {
             console.log(this);
             this.value=e;
             props.data.dob = e;
             console.log(props.data.dob);
         }}
         value="01-01-2019"
         className="w-100"
         placeholderText="BIRTH DATE"
         name="dob" />
      {touched.username && errors.username && <p>{errors.username}</p>}
    </Form.Group>
  </FormikForm>
);

const FormikApp = withFormik({
  mapPropsToValues({ data }) {
    return {
      dob: data.dob || ""
    };
  },
validationSchema: Yup.object().shape({
    dob: Yup.date()
            .max(new Date())

})(App);


export default FormikApp;

1 个答案:

答案 0 :(得分:0)

使用来自setFieldValue的Formik注入道具。

onChange处理程序中将其定义为您的输入setFieldValue('dob','Your Value')

您可以从以下位置访问它

const MyForm = props => {
  const {
    values,
    touched,
    errors,
    handleChange,
    handleBlur,
    handleSubmit,
    setFieldValue
  } = props;
  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        onChange={e => {
          setFieldValue("name", "Your value"); // Access it from props
        }}
        onBlur={handleBlur}
        value={values.name}
        name="name"
      />
    </form>
  );
};
const MyEnhancedForm = withFormik({
  // your code
})(MyForm)

参考-https://jaredpalmer.com/formik/docs/api/formik#setfieldvalue-field-string-value-any-shouldvalidate-boolean-void