WithFormik, передать функцию в качестве реквизита

Я использую Formik для создания формы ввода пользователя. И я использую withFormik для обработки моей формы. В настоящее время я передаю свой handleSubmit внутри своего компонента следующим образом:

export const CreateForm = withFormik({
  mapPropsToValues: () => ({
    primarySkill: "12"
  }),
  validationSchema: () => FormSchema,

  handleSubmit: (values, { setSubmitting }) => {
    setTimeout(() => {
      alert(JSON.stringify(values, null, 2)); // For testing
      setSubmitting(false);
    }, 1000);
  }
})(MyForm);

Вместо этого я хотел бы передать что-то подобное <CreateForm handleSubmit = {handleSubmit} /> в свой компонент App.js (корневой). Может ли кто-нибудь дать мне подсказку, как это сделать, пожалуйста?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
3 618
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете передать функцию через реквизит так, как вы намекаете внизу своего вопроса. Затем вы можете обернуть вызов withFormik внутри тела функции вашего компонента CreateForm, чтобы вы могли передавать реквизиты компоненту CreateForm и CreateForm контролировать, как эти реквизиты сопоставляются с компонентом Formik.

Например:

const MyComponent = props => {
    function handleSubmit(values, { setSubmitting }) {
        // handle
    }

    return (
        <CreateForm handleSubmit = { handleSubmit }/>
    )
}

const CreateForm = props => {
    const { handleSubmit } = props;

    const MyFormWithFormik = withFormik({
        // ...,
        handleSubmit: handleSubmit,
    })(MyForm);

    return <MyFormWithFormik/>
}

Итак, в моем app.js я отображаю <My Component />? Извините, я очень запутался с функцией withFomik()

CCL 24.06.2019 19:33

Он выводит пустой результат для меня ``` export const CreatePDSA = ({ handleSubmit }) => { return withFormik({ mapPropsToValues: () => ({ PDSAName: '', PDSAtype: '', primarySkill: '', secondSkill : '', minPrice: '', валюта: '', формат: '' }), validationSchema: () => CreatePdsaSchema, handleSubmit: handleSubmit })(CreatePDSAForm); }; ```

CCL 24.06.2019 20:18

@CCL Я понимаю, в чем проблема. Вызов withFormik возвращает компонент (не экземпляр для рендеринга), поэтому возврат вывода withFormik на самом деле был ошибкой с моей стороны, извините за это! На самом деле вы хотите вернуть экземпляр обернутой формы withFormik. Подробности смотрите в обновлении ответа.

Henry Woody 25.06.2019 02:37

Это динамическое применение HOC. С вышеизложенным вы потеряете все состояние формы при перемонтировании (поля formik вернутся к начальным значениям). Либо перепишите как классический компонент класса и примените HOC в конструкторе, либо примените HOC вне определения компонента. Чтение: http://reactjs.org/docs/…

gavxn 13.07.2021 19:44

Второй аргумент в наборе аргументов handleSubmit — это сумка formik. Реквизит помещается в формик-мешок. Доступ к свойствам, переданным в пакет formik, можно получить следующим образом: handleSubmit: (values, { props }) => {...your function here}

Другие вопросы по теме