React Hooksを使うことで、フォーム入力をシンプルに実装することができます。本記事では、React Hooksを使ったフォーム入力の実装方法について説明します。

useStateを使った基本的なフォーム入力

useStateを使うことで、フォーム入力の値を管理することができます。以下のコードでは、名前とメールアドレスの入力欄を表示し、入力された値をstateに保存しています。

import React, { useState } from 'react';

function Form() {
  const [name, setName] = useState('');
  const [email, setEmail] = useState('');

  const handleSubmit = (event) => {
    event.preventDefault();
    console.log(`Name: ${name}, Email: ${email}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" value={name} onChange={(e) => setName(e.target.value)} />
      </label>
      <br />
      <label>
        Email:
        <input type="email" value={email} onChange={(e) => setEmail(e.target.value)} />
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
}

export default Form;

上記のコードでは、useStateを使ってnameとemailのstateを定義しています。それぞれのstateは、useStateの戻り値として配列に格納されています。また、入力欄の値が変更されたときには、onChangeイベントでsetStateを呼び出して、stateの値を更新しています。

useReducerを使ったフォーム入力

useReducerを使うことで、複雑なフォーム入力をシンプルに実装することができます。以下のコードでは、複数のフォーム入力を1つのreducerで管理しています。

import React, { useReducer } from 'react';

const formReducer = (state, event) => {
  return {
    ...state,
    [event.name]: event.value
  };
};

function Form() {
  const [formData, setFormData] = useReducer(formReducer, {});

  const handleSubmit = (event) => {
    event.preventDefault();
    console.log(`Name: ${formData.name}, Email: ${formData.email}`);
  };

  const handleChange = (event) => {
    setFormData({
      name: event.target.name,
      value: event.target.value,
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" name="name" value={formData.name || ''} onChange={handleChange} />
      </label>
      <br />
      <label>
        Email:
        <input type="email" name="email" value={formData.email || ''} onChange={handleChange} />
      </label>
      <br />
      <button type="submit
> Submit</button>
    </form>
  );
}

export default Form;

上記のコードでは、useReducerを使ってformReducerを定義しています。このreducerは、各フォーム入力の値をstateに保存するために使用されます。handleChange関数は、dispatch関数を呼び出して、reducerにアクションを渡しています。また、handleSubmit関数では、formDataの値をログに出力しています。

useContextを使ったフォーム入力

useContextを使うことで、複数のコンポーネント間でフォーム入力の値を共有することができます。以下のコードでは、フォームの値をグローバルなstateに保存して、複数のコンポーネントで参照しています。

import React, { useState, useContext } from 'react';

const FormContext = React.createContext();

function FormProvider(props) {
  const [name, setName] = useState('');
  const [email, setEmail] = useState('');

  return (
    <FormContext.Provider value={{ name, setName, email, setEmail }}>
      {props.children}
    </FormContext.Provider>
  );
}

function Form() {
  const { name, setName, email, setEmail } = useContext(FormContext);

  const handleSubmit = (event) => {
    event.preventDefault();
    console.log(`Name: ${name}, Email: ${email}`);
  };

  return (
    <form onSubmit={handleSubmit}>
      <label>
        Name:
        <input type="text" value={name} onChange={(e) => setName(e.target.value)} />
      </label>
      <br />
      <label>
        Email:
        <input type="email" value={email} onChange={(e) => setEmail(e.target.value)} />
      </label>
      <br />
      <button type="submit">Submit</button>
    </form>
  );
}

export { FormProvider, Form };

上記のコードでは、FormContextを定義して、グローバルなstateを作成しています。FormProviderコンポーネントでは、FormContext.Providerを使用して、子コンポーネントにグローバルなstateを渡しています。Formコンポーネントでは、useContextを使用して、グローバルなstateを参照しています。

まとめ

React Hooksを使うことで、フォーム入力の実装がシンプルになります。useStateを使うことで、単純なフォーム入力を実装することができます。useReducerを使うことで、複雑なフォーム入力をシンプルに実装することができます。useContextを使うことで、複数のコンポーネントで共有するフォーム入力の値を管理することができます。以上の方法を組み合わせることで、様々なフォーム入力を実装することができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です