自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用 Formik 創(chuàng)建 React 表單

開發(fā) 前端
Formik 是一個(gè)用于構(gòu)建和管理 React 表單的庫。它的主要目的是簡化表單的開發(fā)流程,使得創(chuàng)建和處理表單變得更加容易。

大家好,今天給大家分享一個(gè)非常實(shí)用的 React 庫——formik。formik 是一個(gè)用于構(gòu)建和管理 React 表單的庫。它的主要目的是簡化表單的開發(fā)流程,使得創(chuàng)建和處理表單變得更加容易。

1、什么是 formik,它提供了哪些功能

formik 是一個(gè)非常流行的表單庫,因?yàn)樗唵我子?,功能?qiáng)大,而且可以與其他庫和框架很好地集成。如果你需要在 React 應(yīng)用中創(chuàng)建和管理表單,那么使用 formik 可以讓你的工作變得更加輕松愉快。

  • 簡化表單數(shù)據(jù)的處理:formik 提供了一組簡單易用的 API,可以幫助你維護(hù)表單數(shù)據(jù)和狀態(tài)。
  • 校驗(yàn)表單數(shù)據(jù):formik 內(nèi)置了一組強(qiáng)大的校驗(yàn)功能,可以幫助你確保表單數(shù)據(jù)的正確性。
  • 提交表單數(shù)據(jù):formik 可以幫助你處理表單提交,并提供了一組方法來讓你處理提交過程中的各種情況。

2、formik 的基本使用方法

使用 formik 需要先安裝它:

npm install formik

然后在你的代碼中引入 formik:

import { Formik } from 'formik';

接下來,你就可以使用 Formik 組件來創(chuàng)建一個(gè)表單:

<Formik
  initialValues={{
    name: '',
    email: '',
  }}
  onSubmit={(values, actions) => {
    // 表單提交處理函數(shù)
  }}
>
  {(props) => (
    <form onSubmit={props.handleSubmit}>
      {/* 表單字段 */}
      <button type="submit">提交</button>
    </form>
  )}
</Formik>

在 Formik 組件內(nèi)部,你需要編寫一個(gè)函數(shù)來渲染表單。這個(gè)函數(shù)會(huì)接收一個(gè)參數(shù),包含了各種用于控制表單的屬性和方法。你可以使用這些屬性和方法來渲染表單的各個(gè)部分。

表單提交時(shí),F(xiàn)ormik 組件會(huì)調(diào)用 onSubmit 屬性指定的函數(shù)。這個(gè)函數(shù)會(huì)接收兩個(gè)參數(shù):表單數(shù)據(jù)對象和表單操作對象。你可以使用這兩個(gè)參數(shù)來處理表單提交,例如將數(shù)據(jù)發(fā)送到服務(wù)器。

formik 提供了許多其他的屬性和方法來幫助你控制表單的各種狀態(tài)和功能。例如,你可以使用 handleChange 和 handleBlur 方法來監(jiān)聽表單字段的輸入和失焦事件,使用 validateForm 方法來校驗(yàn)表單數(shù)據(jù)的有效性,使用 setFieldValue 方法來更新表單字段的值,使用 setErrors 方法來設(shè)置表單字段的錯(cuò)誤信息,使用 isSubmitting 屬性來檢測表單是否正在提交中,等等。

還有一些其他的重要的屬性和方法,例如:

  • values:表單數(shù)據(jù)對象,包含了所有表單字段的值。
  • errors:表單字段的錯(cuò)誤信息對象。
  • touched:表單字段是否已經(jīng)被訪問過的對象。
  • handleReset:重置表單的方法。

通過使用這些屬性和方法,你可以構(gòu)建出各種功能強(qiáng)大的表單。

最后,需要注意的是,formik 還提供了一些其他的組件,例如 Form、Field 和 ErrorMessage,可以幫助你更簡單地創(chuàng)建表單。你可以參考 formik 文檔,了解更多關(guān)于這些組件的細(xì)節(jié)。

3、關(guān)于 formik 的高級用法

你可以使用 Formik 創(chuàng)建自定義組件。要?jiǎng)?chuàng)建自定義組件,你需要使用 Formik 的 withFormik 高階組件。這個(gè)高階組件會(huì)給你一個(gè) formik 對象,這個(gè)對象包含了 Formik 的所有屬性和方法。你可以使用這個(gè)對象來像使用受控組件一樣使用自定義組件。

例如,你可以使用以下代碼創(chuàng)建一個(gè)自定義輸入組件:

import React from 'react';
import { withFormik, Form, Field } from 'formik';

const CustomInput = ({
  field, // { name, value, onChange, onBlur }
  form: { touched, errors }, // also values, setXXXX, handleXXXX, dirty, isValid, status, etc.
  ...props
}) => (
  <div>
    <input type="text" {...field} {...props} />
    {touched[field.name] && errors[field.name] && <div className="error">{errors[field.name]}</div>}
  </div>
);

const MyForm = ({
  values,
  errors,
  touched,
  handleChange,
  handleBlur,
  handleSubmit,
  isSubmitting,
}) => (
  <Form>
    <Field type="text" name="email" component={CustomInput} />
    <button type="submit" disabled={isSubmitting}>
      Submit
    </button>
  </Form>
);

const FormikApp = withFormik({
  mapPropsToValues: () => ({ email: '' }),
  handleSubmit: (values, { setSubmitting }) => {
    setTimeout(() => {
      alert(JSON.stringify(values, null, 2));
      setSubmitting(false);
    }, 1000);
  },
  validationSchema: Yup.object().shape({
    email: Yup.string()
      .email()
      .required('Required'),
  }),
})(MyForm);

export default FormikApp;

在這個(gè)例子中,我們使用了 Formik 的 withFormik 高階組件來創(chuàng)建一個(gè)自定義輸入組件。我們通過在 Form 組件中使用 Field 組件來使用這個(gè)自定義組件。我們還指定了 handleSubmit 函數(shù),這個(gè)函數(shù)會(huì)在表單提交時(shí)調(diào)用。

Formik 也提供了一些內(nèi)置的驗(yàn)證方法,你可以使用它們來驗(yàn)證表單數(shù)據(jù)。例如,你可以使用以下代碼來驗(yàn)證表單字段是否為必填項(xiàng):

import { useFormik } from 'formik';

const MyForm = () => {
  const formik = useFormik({
    initialValues: {
      email: '',
    },
    onSubmit: values => {
      alert(JSON.stringify(values, null, 2));
    },
    validate: values => {
      const errors = {};
      if (!values.email) {
        errors.email = 'Required';
      } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(values.email)) {
        errors.email = 'Invalid email address';
      }
      return errors;
    },
  });
  return (
    <form onSubmit={formik.handleSubmit}>
      <label htmlFor="email">Email Address</label>
      <input
        id="email"
        name="email"
        type="email"
        onChange={formik.handleChange}
        onBlur={formik.handleBlur}
        value={formik.values.email}
      />
      {formik.touched.email && formik.errors.email ? (
        <div>{formik.errors.email}</div>
      ) : null}
      <button type="submit">Submit</button>
    </form>
  );
};

此外,F(xiàn)ormik 還提供了 setErrors 和 setFieldError 方法,你可以使用它們來在表單提交前設(shè)置錯(cuò)誤信息。你可以使用以下代碼來在表單提交前設(shè)置錯(cuò)誤信息:

import { useFormik } from 'formik';

const MyForm = () => {
  const formik = useFormik({
    initialValues: {
      email: '',
    },
    onSubmit: values => {
      // 在這里進(jìn)行表單提交處理
    },
  });
  const validateEmail = email => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (email === 'test@example.com') {
          formik.setFieldError('email', 'Email already in use');
          reject();
        } else {
          resolve();
        }
      }, 1000);
    });
  };
  return (
    <form onSubmit={formik.handleSubmit}>
      <label htmlFor="email">Email Address</label>
      <input
        id="email"
        name="email"
        type="email"
        onChange={formik.handleChange}
        onBlur={formik.handleBlur}
        value={formik.values.email}
      />
      {formik.touched.email && formik.errors.email ? (
        <div>{formik.errors.email}</div>
      ) : null}
      <button type="submit" onClick={() => validateEmail(formik.values.email)}>
        Submit
      </button>
    </form>
  );
};

在這個(gè)例子中,我們使用了一個(gè)異步驗(yàn)證函數(shù) validateEmail 來模擬表單提交前的驗(yàn)證。如果電子郵件地址已被使用,則會(huì)設(shè)置錯(cuò)誤信息。

4、一個(gè)登錄表單實(shí)例

下面我們來通過 Formik 創(chuàng)建簡單登錄表單的實(shí)例,代碼如下:

import { Formik, Form, Field, ErrorMessage } from 'formik';

<Formik
  initialValues={{ email: '', password: '' }}
  validate={values => {
    const 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);
  }}
>
  {({ isSubmitting }) => (
    <Form>
      <Field type="email" name="email" />
      <ErrorMessage name="email" component="div" />
      <Field type="password" name="password" />
      <ErrorMessage name="password" component="div" />
      <button type="submit" disabled={isSubmitting}>
        Submit
      </button>
    </Form>
  )}
</Formik>

在這個(gè)例子中,我們創(chuàng)建了一個(gè) Formik 組件,并提供了幾個(gè) props:

  • initialValues: 表單初始值。
  • validate: 驗(yàn)證函數(shù),在表單提交時(shí)調(diào)用。
  • onSubmit: 提交表單時(shí)調(diào)用的函數(shù)。

我們還使用了 Field 組件來創(chuàng)建表單輸入,并使用 ErrorMessage 組件來顯示錯(cuò)誤消息。

當(dāng)用戶提交表單時(shí),F(xiàn)ormik 會(huì)調(diào)用 validate 函數(shù)并檢查表單值是否有效。如果表單值有效,則會(huì)調(diào)用 onSubmit 函數(shù)并提交表單。

5、總結(jié)

最后我們來做下總結(jié),F(xiàn)ormik 是一個(gè)為 React 應(yīng)用程序提供表單狀態(tài)管理的庫。它提供了一組簡單的、可擴(kuò)展的組件和一組優(yōu)秀的工具方法,可以大大簡化在 React 應(yīng)用程序中使用表單的工作。

優(yōu)點(diǎn):

  • 簡化表單開發(fā)流程。Formik 封裝了很多常見的表單功能,如輸入字段驗(yàn)證、提交處理等,使開發(fā)者能夠?qū)W⒂趯?shí)現(xiàn)表單的業(yè)務(wù)邏輯。
  • 減少代碼量。Formik 提供了一組簡單的組件和方法,使開發(fā)者無需編寫大量的代碼就能實(shí)現(xiàn)常見的表單功能。
  • 提供豐富的功能。Formik 提供了很多有用的功能,如自定義驗(yàn)證器、自定義提交處理器等,可以滿足各種復(fù)雜的表單需求。

缺點(diǎn):

  • 對于簡單的表單,使用 Formik 可能會(huì)帶來一些額外的復(fù)雜度。
  • Formik 依賴于 React 和 Yup(一個(gè)用于表單驗(yàn)證的庫),如果你的項(xiàng)目中已經(jīng)使用了其他的表單庫或驗(yàn)證庫,則可能需要進(jìn)行一些額外的集成工作。

使用 Formik 的注意事項(xiàng):

  • 請務(wù)必熟練掌握 Formik 的使用方法,以便能夠充分發(fā)揮 Formik 的優(yōu)勢。
  • 盡量使用 Formik 組件和方法來實(shí)現(xiàn)表單功能,避免手動(dòng)維護(hù)表單狀態(tài)。 如果你需要在表單中使用自定義組件,請確保這些組件能夠與 Formik 的組件和方法配合使用。
  • 如果你需要在表單中使用異步驗(yàn)證或提交,請注意使用 Formik 提供的異步方法來實(shí)現(xiàn)。
  • 使用 Formik 時(shí),請注意遵守 React 的性能優(yōu)化指南,以便能夠最大化應(yīng)用程序的性能。

關(guān)于如何使用 formik 創(chuàng)建 React 表單的介紹就到這里,希望今天的分享能夠幫助到你。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-06-01 09:27:52

視頻動(dòng)畫Remotion

2024-04-17 08:50:59

開源FormikReact 表單庫

2022-12-15 08:49:58

ReactQR生成器

2016-11-01 21:02:47

javascriptreact.jsreact-route

2023-06-16 09:08:39

ReactContextRFC

2021-05-25 05:28:34

ReactJavaScript前端

2021-06-09 21:49:43

React 360VR虛擬

2022-03-14 08:54:04

NetlifyHTMLReact

2022-04-14 08:00:00

Cypress測試開發(fā)

2022-07-18 09:01:58

React函數(shù)組件Hooks

2021-03-12 18:25:09

開發(fā)前端React

2023-12-01 09:18:27

AxiosAxios 庫

2009-09-03 09:40:57

C#創(chuàng)建表單

2021-03-30 17:03:02

React開發(fā)部署Nginx

2016-08-31 17:03:20

JavascriptReact NativWeb

2021-05-14 14:33:07

Python加密貨幣

2011-05-24 10:24:29

創(chuàng)建與使用VMware

2009-08-06 16:44:03

C#創(chuàng)建WebServ

2014-05-12 16:40:13

Linux命令快照

2023-05-19 08:00:00

ReactJSJavaScript蜘蛛圖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)