検索
ホームページウェブフロントエンドCSSチュートリアルFormikを使用してReactのフォームを処理します

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 までご連絡ください。
マウスの動きのシミュレーションマウスの動きのシミュレーションApr 22, 2025 am 11:45 AM

ライブトークやクラス中にインタラクティブなアニメーションを表示しなければならなかった場合、スライドと対話するのが必ずしも簡単ではないことを知っているかもしれません

Astro ActionsとFuse.jsでのパワー検索Astro ActionsとFuse.jsでのパワー検索Apr 22, 2025 am 11:41 AM

Astroを使用すると、ビルド中にほとんどのサイトを生成できますが、fuse.jsのようなものを使用して検索機能を処理できるサーバー側のコードが少しあります。このデモでは、ヒューズを使用して、個人の「ブックマーク」セットを検索します。

未定義:3番目のブール値未定義:3番目のブール値Apr 22, 2025 am 11:38 AM

ドキュメントが保存されている間にGoogleドキュメントに表示されるものと同様に、プロジェクトの1つに通知メッセージを実装したかったのです。言い換えれば、a

三元声明の防衛三元声明の防衛Apr 22, 2025 am 11:25 AM

数ヶ月前、私はハッカーのニュースに出演していました(1つのように)。あなたがこのアイデアに慣れていない場合(私のように

多言語翻訳にWeb Speech APIを使用します多言語翻訳にWeb Speech APIを使用しますApr 22, 2025 am 11:23 AM

サイエンスフィクションの初期の頃から、私たちは私たちに話しかける機械について空想してきました。今日は当たり前です。それでも、作成のための技術

Jetpack GutenbergブロックJetpack GutenbergブロックApr 22, 2025 am 11:20 AM

私はその日私たちにワードキャンプにいたので、グーテンバーグがコアにリリースされたときのことを覚えています。数ヶ月が今から経過しているので、ますます私たちのことを想像してください

VUEで再利用可能なページネーションコンポーネントを作成しますVUEで再利用可能なページネーションコンポーネントを作成しますApr 22, 2025 am 11:17 AM

ほとんどのWebアプリケーションの背後にあるアイデアは、データベースからデータを取得し、可能な限り最良の方法でユーザーに提示することです。そこでデータを扱うとき

「ボックスシャドウ」とクリップパスを一緒に使用します「ボックスシャドウ」とクリップパスを一緒に使用しますApr 22, 2025 am 11:13 AM

&#039;は、理にかなっていると思われることを非常に実行できる状況を少し段階的に実行しますが、CSSのトリックでそれを成し遂げることができます。これで

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません