Используя React

#reactjs #formik

Вопрос:

У меня есть компонент формы и родительский компонент, который принимает компонент формы как дочерний:

 import {Formik, Form, Field} from 'formik'; import Parent from './Parent'  const sleep = (ms) =gt; new Promise((r) =gt; setTimeout(r, ms));   function App() {  return (  lt;Parentgt;  lt;Formik  initialValues={{  name: 'John',  age: 27  }}  onSubmit={async (values) =gt; {  console.log('values',values);  await sleep(2000);  return 'success'  }}  gt;  lt;Formgt;  lt;label htmlFor="name"gt;Namelt;/labelgt;  lt;Field  type="text"  name="name"  /gt;  lt;label htmlFor="stuff"gt;Agelt;/labelgt;  lt;Field  type="number"  name="age"  /gt;  lt;/Formgt;  lt;/Formikgt;  lt;/Parentgt;   ); }  export default App;   
 const Parent = (props) =gt; {   // I would like this function to be useable  const handleSubmit = async () =gt; {  const res = await onSubmit() // This should be Formik's onSubmit;  if (res) {  console.log('res', res);  }  };    return (  lt;divgt;  lt;h1gt;Hellolt;/h1gt;  {props.children}  lt;button type="submit"gt;Submit Formlt;/buttongt;  lt;/divgt;  ); }  export default Parent;  

Конечно, я мог бы поместить кнопку «Отправить» внутри формы formik, и она сработает нормально. Но я хотел бы каким-то образом запустить отправку из родительского компонента в функции handleSubmit (). Я попытался запустить children.props.onSubmit() в родительском, но это решение не дает никаких значений, так как onSubmit запускается неправильно.

Ответ №1:

Решение состояло в том, чтобы переместить Formik за пределы родительского, чтобы у меня был доступ ко всем функциям и значениям formik с помощью useFormikContext