Могу ли я получить доступ к значению в Formik до запуска onSubmit? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь сделать некоторые математические расчеты над значением, которое вводит пользователь

<Form>
    <label htmlFor={`price${props.id}`}>Price</label>
       <Field
          name={`price${props.id}`}
          type="text"
       />
       <ErrorMessage name={`price${props.id}`} />
       <span> </span> //Where I want to display value
      ...

Вот как я использую Formik. Форма просто вложена в Formik:

<Formik
          initialValues={{
            [`price${props.id}`]: '',
}}

          onSubmit={(values, { setSubmitting }) => {
            setTimeout(() => {
              alert(JSON.stringify(values, null, 2))
              setSubmitting(false)
          }, 400)
}}>
    <Form>
     ....
    </Form>
</Formik>

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

Formik принимает два типа потомков:

  1. Узел React
  2. Функция, которая возвращает узел React

В данный момент вы передаете узел React Formik (# 1).

Чтобы получить доступ к values, необходимо изменить дочерний элемент на функцию (# 2), которая называется пропеллером рендеринга.

Значения могут затем быть доступным вот так:

<Formik 
  initialValues={/* ... */} 
  onSubmit={/* ... */}
>
  {props => (
    <form>
      {/* here we can access props.values */}
    </form>
  )}
</Formik>

Полный список того, что props содержится, можно найти здесь .

0 голосов
/ 07 апреля 2020

<Formik> может предоставить дочернюю функцию, которая позволит вам получить доступ ко всем его реквизитам, включая текущий values -

<Formik>
  {{ values } => (
    <Form>
      <label htmlFor={`price${props.id}`}>Price</label>
      <Field
        name={`price${props.id}`}
        type="text"
      />
      <ErrorMessage name={`price${props.id}`} />
      <span>
        // will show the current value, or you can do calculations
        {values[`price${props.id}`]}
      </span>
    </Form>
  )}
</Formik>
...