目次
制御された反応フォームの構築
なぜformikを選ぶのですか?
Formikの実装
Formikを使用したフォーム検証
方法3: withFormik高次コンポーネント
実用的な例
エラーメッセージの表示
ユーザー名の生成
結論
ホームページ ウェブフロントエンド CSSチュートリアル Formikを使用してReactのフォームを処理します

Formikを使用してReactのフォームを処理します

Apr 07, 2025 am 10:00 AM

Formikを使用してReactのフォームを処理します

Webフォームは、Webサイトやアプリケーションに不可欠です。ネイティブHTMLフォームは基本的な機能を提供しますが、状態を管理する、検証、および提出を複雑にすることができます。コンポーネント駆動型のアプローチで反応すると、フォームの処理が簡素化されますが、それでも冗長コードにつながる可能性があります。軽量ライブラリであるFormikは、これらの課題にエレガントに対処し、州の管理、検証、および提出を簡素化します。

この記事では、FormikとのReactフォームの構築を実証し、状態、検証、および提出を処理する能力を紹介します。基本的なReactコンポーネントから始めて、Formikを統合します。

制御された反応フォームの構築

Reactコンポーネントは、状態と小道具に依存しています。 HTMLフォーム要素のvalue属性を通じて内部状態を維持します。これにより、それらは制御されていないコンポーネントになります - DOMは状態を管理します。ただし、Reactが状態を管理する制御されたコンポーネントは、より良い制御と単一の真実源を提供します。

単純な制御されていないHTMLフォームは次のようになるかもしれません:

<div class="formRow">
  <label for="email">電子メールアドレス</label>
  <input type="email" id="email">
</div>
<div class="formRow">
  <label for="password">パスワード</label>
  <input type="password" id="password">
</div>
<button type="submit">提出する</button>
ログイン後にコピー

これを制御された反応成分に変換します。

関数htmlform(){
  const [email、setemail] = race.usestate( "");
  const [password、setPassword] = race.usestate( "");

  戻る (
    
ログイン後にコピー
setemail(e.target.value)} />
setPassWord(E.Target.Value)} />
); }

このアプローチは、フォーム値に対して単一の真実のソースを提供し、より簡単な検証とパフォーマンスの最適化を可能にします。

なぜformikを選ぶのですか?

Reactには多数のフォーム管理ライブラリが存在します(例、React Hook Form、Reduxフォーム)。 Formikは次のことを区別します。

  1. 宣言的アプローチ:抽象化により、状態、検証、および提出が簡素化されます。
  2. エスケープハッチ:抽象化にもかかわらず、必要に応じてコントロールを提供します。
  3. 共同開催状態:コンポーネント内にフォーム関連のロジックを保持します。
  4. 適応性: formikを必要に応じて使用することができます。
  5. 使いやすさ:シンプルで効果的です。

Formikをフォームコンポーネントに統合しましょう。

Formikの実装

基本的なログインフォームを作成し、3つのFormik使用方法を調査します。

  1. useFormikフック
  2. Reactコンテキストを持つFormik(<formik></formik> ))
  3. withFormik高次コンポーネント

デモには、FormikとYupパッケージが必要です。

方法1:FormikフックuseFormik

現在のフォームは機能していません。 useFormikフックは、Formik関数と変数を提供します。返された値を記録すると、その内容が明らかになります。

useFormikinitialValuesonSubmitハンドラーを備えた使用を使用します。

 //反応コンポーネント
関数baseformik(){
  const formik = useformik({
    initialValues:{email: ""、password: ""}、
    onSubmit(values){
      //提出ロジックをフォーム
    }
  });

  戻る (
    
ログイン後にコピー
ログイン後にコピー
{/ *フォーム要素 */}
); }

Formikを結合して要素を形成します:

 //反応コンポーネント
関数baseformik(){
  const formik = useformik({
    initialValues:{email: ""、password: ""}、
    onSubmit(values){
      //提出ロジックをフォーム
    }
  });

  戻る (
    
ログイン後にコピー
ログイン後にコピー
{/ * ...他のフォーム要素 */}
); }

これにより、送信( onSubmit={formik.handleSubmit} )と入力状態( valueformik.getFieldPropsを介してonChange )を処理します。手動の状態管理とイベントの取り扱いは避けています。 getFieldPropshandleSubmitを破壊すると、コードの明確さがさらに向上します。

<formik></formik>コンポーネントは、ような内蔵コンポーネントを使用して、さらに抽象化します<field></field><form></form> 、 そして<errormessage></errormessage>。これらのコンポーネントは、レンダリングプロップパターンを利用します。

 'formik'から{formik、field、form}をimport;

関数formikrenderprops(){
  const initialValues = {email: ""、password: ""};

  const onsubmit =(values)=> {
    alert(json.stringify(values、null、2));
  };

  戻る (
    <formik initialvalues="{initialValues}" onsubmit="{onSubmit}">
      {()=>(
        <form>
          <field classname="email formField" name="email" type="email"></field>
          {/ * ...他のフォーム要素 */}
        </form>
      )}
    </formik>
  );
}
ログイン後にコピー

Formikは状態と提出を処理します。フォーム構造に焦点を当てます。

Formikを使用したフォーム検証

Formikは、フォームレベル( validateまたはvalidationSchemaを使用)、フィールドレベル、または手動トリガーで検証を提供します。フォームレベルの検証は、フォーム全体を一度に検証します。 validateカスタム検証用ですが、 validationSchemaはYUPのようなライブラリを使用します。

validateを使用した例:

 const formik = useformik({
  // ...
  検証:()=> {
    const errors = {};
    if(!formik.values.email){errors.email = "必須"; }
    // ...その他の検証
    戻りエラー。
  }、
  // ...
});
ログイン後にコピー

YUPを使用したvalidationSchemaを使用した例:

 const formik = useformik({
  // ...
  validationschema:yup.object()。shape({
    電子メール:Yup.String()。電子メール( "Invalid Email")。必須( "必須")、
    // ...その他の検証
  })、
  // ...
});
ログイン後にコピー

フィールドレベルと手動検証も可能です。

方法3: withFormik高次コンポーネント

withFormikは、フォームコンポーネントをラップする高次コンポーネントです。

実用的な例

エラーメッセージの表示とユーザー名の生成を示しましょう。

エラーメッセージの表示

Formikはエラー表示を簡素化します。 errorsオブジェクトを確認し、メッセージを表示します。

<label htmlfor="email">
  電子メールアドレス
  {formik.touched.email && formik.errors.email}
</label>
ログイン後にコピー

または使用します<errormessage></errormessage>

<errormessage name="email"></errormessage>
ログイン後にコピー

ユーザー名の生成

FormikのsetValuesを使用して、電子メールからユーザー名を生成できます。

 onSubmit(values){
  formik.setValues({... values、username: `@$ {values.email.split("@")[0]}`});
}
ログイン後にコピー

結論

Formikは、Reactフォームの取り扱いを大幅に簡素化します。この記事では、基本について説明しています。高度な機能とユースケースについては、Formikのドキュメントを調べてください。

以上がFormikを使用してReactのフォームを処理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

Redwood.jsと動物相を使用してイーサリアムアプリを構築します Redwood.jsと動物相を使用してイーサリアムアプリを構築します Mar 28, 2025 am 09:18 AM

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

ブラウザから有効なCSSプロパティ値を取得できますか? ブラウザから有効なCSSプロパティ値を取得できますか? Apr 02, 2025 pm 06:17 PM

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード 粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード Apr 03, 2025 am 10:30 AM

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

CI/CDで少し CI/CDで少し Apr 02, 2025 pm 06:21 PM

「ウェブサイト」は「モバイルアプリ」よりも適していると言いますが、Max Lynchからのこのフレーミングが好きです。

WordPressブロックエディターでのマークダウンとローカリゼーションを使用します WordPressブロックエディターでのマークダウンとローカリゼーションを使用します Apr 02, 2025 am 04:27 AM

WordPressエディターでユーザーに直接ドキュメントを表示する必要がある場合、それを行うための最良の方法は何ですか?

レスポンシブデザインのブラウザを比較します レスポンシブデザインのブラウザを比較します Apr 02, 2025 pm 06:25 PM

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? Apr 05, 2025 pm 05:51 PM

フレックスレイアウトの紫色のスラッシュ領域に関する質問フレックスレイアウトを使用すると、開発者ツールなどの混乱する現象に遭遇する可能性があります(D ...

See all articles