Как использовать withFormik Field с response-datepicker? - PullRequest
0 голосов
/ 21 июня 2019

Я пытаюсь отправить мои данные dob из моего класса Main в дочерний компонент (RegisterAccount.jsx) и проверить их в дочернем компоненте, используя yup и withFormik Field.Проблема в том, что:

  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 голосов
/ 21 июня 2019

Использовать метод setFieldValue из инъецированных опор Формика.

Определите его на обработчике 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

...