React & Material UI を使ったフォーム作成: TextField & DropDownMenu コンポーネントの使い方(初心者向け)
Material UI TextField、DropDownMenu コンポーネントからデータを取得する方法(React、JavaScript、Material Design)
このチュートリアルでは、React、JavaScript、Material Design を使用して、Material UI TextField と DropDownMenu コンポーネントからユーザー入力データをどのように取得できるかを説明します。
Material UI TextField と DropDownMenu
Material UI は、React におけるユーザーインターフェースコンポーネントの包括的なライブラリです。TextField と DropDownMenu は、フォームの作成によく使用される 2 つのコンポーネントです。
- TextField: ユーザーがテキストを入力するためのフィールドです。
- DropDownMenu: ユーザーがオプションのリストから選択できるメニューです。
データの取得
以下の手順で、TextField と DropDownMenu から値を取得できます。
- コンポーネント内にステート変数を定義する: 各コンポーネント内に、コンポーネントの値を保持するステート変数を定義します。
- onChange イベントハンドラーを追加する: TextField と DropDownMenu コンポーネントに
onChange
イベントハンドラーを追加します。このハンドラーは、ユーザーが値を変更するたびに呼び出されます。 - イベントハンドラー内でステート変数を更新する:
onChange
イベントハンドラー内で、ステート変数を新しい値に更新します。
例
import React, { useState } from 'react';
import TextField from '@material-ui/core/TextField';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
const App = () => {
const [name, setName] = useState('');
const [city, setCity] = useState('');
const handleNameChange = (event) => {
setName(event.target.value);
};
const handleCityChange = (event) => {
setCity(event.target.value);
};
return (
<div>
<TextField
id="name"
label="名前"
value={name}
onChange={handleNameChange}
/>
<Select
id="city"
label="市区町村"
value={city}
onChange={handleCityChange}
>
<MenuItem value="東京">東京</MenuItem>
<MenuItem value="大阪">大阪</MenuItem>
<MenuItem value="名古屋">名古屋</MenuItem>
</Select>
</div>
);
};
export default App;
この例では、name
と city
という 2 つのステート変数を定義しています。TextField
コンポーネントの value
プロパティと onChange
イベントハンドラーを使用して、name
ステート変数を更新します。DropDownMenu
コンポーネントの value
プロパティと onChange
イベントハンドラーを使用して、city
ステート変数を更新します。
補足
- 上記の例は基本的なものです。実際のアプリケーションでは、バリデーションやエラー処理を追加する必要がある場合があります。
Material UI TextField、DropDownMenu コンポーネントのサンプルコード(React、JavaScript、Material Design)
import React, { useState } from 'react';
import TextField from '@material-ui/core/TextField';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
const App = () => {
const [name, setName] = useState('');
const [city, setCity] = useState('');
const handleNameChange = (event) => {
setName(event.target.value);
};
const handleCityChange = (event) => {
setCity(event.target.value);
};
return (
<div>
<TextField
id="name"
label="名前"
value={name}
onChange={handleNameChange}
/>
<Select
id="city"
label="市区町村"
value={city}
onChange={handleCityChange}
>
<MenuItem value="東京">東京</MenuItem>
<MenuItem value="大阪">大阪</MenuItem>
<MenuItem value="名古屋">名古屋</MenuItem>
</Select>
<p>名前: {name}</p>
<p>市区町村: {city}</p>
</div>
);
};
export default App;
説明
このコードは次のように動作します。
useState
フックを使用して、name
とcity
という 2 つのステート変数を定義します。TextField
コンポーネントは、label
プロパティを使用してラベルを設定し、value
プロパティを使用してname
ステート変数の現在の値を設定します。onChange
イベントハンドラーは、ユーザーがテキストフィールドに入力するたびにhandleNameChange
関数を呼び出します。handleNameChange
関数は、event.target.value
を使用して新しい名前をname
ステート変数に設定します。- 最後に、
p
要素を使用して、現在のname
とcity
の値を表示します。
実行方法
このコードを実行するには、次の手順を実行します。
- Node.js と npm をインストールします。
- プロジェクトディレクトリに移動し、次のコマンドを実行します。
npm init -y
npm install react react-dom @material-ui/core
App.js
という名前のファイルを作成し、上記のコードを貼り付けます。- 次のコマンドを実行して、アプリケーションを起動します。
npm start
ブラウザが開き、name
と city
のラベルが付いたテキストフィールドとドロップダウンメニューが表示されます。テキストフィールドに入力するか、ドロップダウンメニューからオプションを選択すると、対応するステート変数が更新され、画面下部の p
要素に反映されます。
カスタマイズ
このコードは、ニーズに合わせてカスタマイズできます。たとえば、次のことができます。
- 新しいステート変数を追加して、ユーザーから収集するその他のデータを保存します。
- バリデーションロジックを追加して、ユーザー入力のエラーをチェックします。
TextField
またはSelect
コンポーネントのスタイルを変更します。
Material UI ドキュメントには、TextField と DropDownMenu コンポーネントに関する詳細情報が記載されています。
Material UI TextField、DropDownMenu コンポーネントからデータを取得するその他の方法
useRef
フックを使用して、コンポーネント内の DOM 要素への参照を取得できます。その後、この参照を使用して、要素の値を取得できます。この方法は、useState
フックを使用するよりもパフォーマンスが優れている場合があります。
import React, { useRef } from 'react';
import TextField from '@material-ui/core/TextField';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
const App = () => {
const nameRef = useRef(null);
const cityRef = useRef(null);
const handleNameChange = () => {
const name = nameRef.current.value;
// ... name を処理
};
const handleCityChange = () => {
const city = cityRef.current.value;
// ... city を処理
};
return (
<div>
<TextField
id="name"
label="名前"
ref={nameRef}
onChange={handleNameChange}
/>
<Select
id="city"
label="市区町村"
ref={cityRef}
onChange={handleCityChange}
>
<MenuItem value="東京">東京</MenuItem>
<MenuItem value="大阪">大阪</MenuItem>
<MenuItem value="名古屋">名古屋</MenuItem>
</Select>
</div>
);
};
export default App;
Formik ライブラリ
Formik は、React フォームを構築するためのライブラリです。Formik を使用すると、フォームの状態を管理し、フォームの送信を処理するのが簡単になります。Formik には、TextField と DropDownMenu コンポーネントの値を取得するためのユーティリティが含まれています。
import React from 'react';
import { Formik, useField } from 'formik';
import TextField from '@material-ui/core/TextField';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
const App = () => {
return (
<Formik
initialValues={{
name: '',
city: '',
}}
onSubmit={(values) => {
// ... values を処理
}}
>
{({ values, handleChange }) => (
<div>
<TextField
id="name"
label="名前"
name="name"
value={values.name}
onChange={handleChange}
/>
<Select
id="city"
label="市区町村"
name="city"
value={values.city}
onChange={handleChange}
>
<MenuItem value="東京">東京</MenuItem>
<MenuItem value="大阪">大阪</MenuItem>
<MenuItem value="名古屋">名古屋</MenuItem>
</Select>
<button type="submit">送信</button>
</div>
)}
</Formik>
);
};
export default App;
react-hook-form は、React フォームを構築するためのもう 1 つのライブラリです。react-hook-form は Formik に似ていますが、より軽量で使いやすいです。react-hook-form には、TextField と DropDownMenu コンポーネントの値を取得するためのユーティリティも含まれています。
import React from 'react';
import { useForm } from 'react-hook-form';
import TextField from '@material-ui/core/TextField';
import Select from '@material-ui/core/Select';
import MenuItem from '@material-ui/core/MenuItem';
const App = () => {
const { register, handleSubmit } = useForm();
const onSubmit = (data) => {
// ... data を処理
};
return (
<form onSubmit={handleSubmit(onSubmit)}>
<TextField
id="name"
label="名前"
name="name"
ref={register}
/>
<Select
id="city"
label="市区町村"
name="
javascript reactjs material-design