了解Formik和React

问题描述 投票:0回答:1

这可能不是发布此问题的最佳位置,但在哪里呢?


下面的代码取自Formik's overview page,我对onSubmit处理程序非常困惑:

form元素有一个onSubmit属性,引用handleSubmit,它传递给匿名函数:<form onSubmit={handleSubmit}>。它来自哪里?

Formik组件还具有onSubmit属性:

onSubmit={(values, { setSubmitting }) => { ... }

这些如何相互关联?到底是怎么回事?

import React from 'react';
import { Formik } from 'formik';

const Basic = () => (
  <div>
    <h1>Anywhere in your app!</h1>
    <Formik
      initialValues={{ email: '', password: '' }}
      validate={values => {
        let errors = {};
        if (!values.email) {
          errors.email = 'Required';
        } else if (
          !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i.test(values.email)
        ) {
          errors.email = 'Invalid email address';
        }
        return errors;
      }}
      onSubmit={(values, { setSubmitting }) => {
        setTimeout(() => {
          alert(JSON.stringify(values, null, 2));
          setSubmitting(false);
        }, 400);
      }}
    >
      {({
        values,
        errors,
        touched,
        handleChange,
        handleBlur,
        handleSubmit,
        isSubmitting,
        /* and other goodies */
      }) => (
        <form onSubmit={handleSubmit}>
          <input
            type="email"
            name="email"
            onChange={handleChange}
            onBlur={handleBlur}
            value={values.email}
          />
          {errors.email && touched.email && errors.email}
          <input
            type="password"
            name="password"
            onChange={handleChange}
            onBlur={handleBlur}
            value={values.password}
          />
          {errors.password && touched.password && errors.password}
          <button type="submit" disabled={isSubmitting}>
            Submit
          </button>
        </form>
      )}
    </Formik>
  </div>
);

export default Basic; 
reactjs formik
1个回答
0
投票

该组件将onSubmit作为支柱,您可以在提交表单时执行要执行的代码。此prop还提供了一些arguments,例如值(表单的值),供您在onSubmit函数中使用。

handleSubmit表单是从Formik库自动生成的,它自动解释了here解释的一些常见表单逻辑。 handleSubmit将自动执行上面提到的onSubmit函数作为其阶段的一部分(预提交,验证,提交)。希望这能回答你的问题!

© www.soinside.com 2019 - 2024. All rights reserved.