投稿日:2021年6月4日
Reactで入力フォームを使う際にformタグを使用するか否かについて実例をふまえて詳しく解説しています。
Reactで入力フォームを作る場合に、<form>タグを使う・使わないでどのような違いが出るのかについて解説しています。
この記事のコードは以下の環境で確認されました。
<form>タグ使う・使わないでは作成するフォームに以下のような違いがでます。
ちなみに上記の動作はpreventDefault()というメソッドでオフにできるのですが、それを使うくらいなら<form>タグを使う必要はないですね。
実際に実装してみて動作の違いを確認してみます。
まずは<form>タグを使わずに簡単なフォームを実装してみます。
import React, {useState} from "react";
function App() {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("")
/**
* メールアドレス値変更処理
* @param {*} e
*/
const changeEmail = (e) => {
setEmail(e.target.value);
}
/**
* パスワードの値変更処理
* @param {*} e
*/
const changePassword = (e) => {
setPassword(e.target.value);
}
/**
* 送信ボタンクリック
* @param {*} e
*/
const clickSubmit = (e) => {
console.log("送信されました");
// POST処理
}
return (
<div className="App">
<div>
<input type="email" id="email" onChange={changeEmail} value={email}></input>
<input type="password" id="password" onChange={changePassword} value={password}></input>
<button type="submit" onClick={clickSubmit}>送信</button>
</div>
</div>
);
}
export default App;
このコンポーネントは以下のような特徴があります。
次に同じフォームをformタグを使って実装をしてみましょう。
次に<form>タグで試して見ましょう。
import React, {useState} from "react";
function App() {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("")
/**
* メールアドレス値変更処理
* @param {*} e
*/
const changeEmail = (e) => {
setEmail(e.target.value);
}
/**
* パスワードの値変更処理
* @param {*} e
*/
const changePassword = (e) => {
setPassword(e.target.value);
}
/**
* 送信ボタンクリック
* @param {*} e
*/
const clickSubmit = (e) => {
console.log("送信されました");
// POST処理
}
return (
<div className="App">
<form>
<input type="email" id="email" onChange={changeEmail} value={email}></input>
<input type="password" id="password" onChange={changePassword} value={password}></input>
<button type="submit" onClick={clickSubmit}>送信</button>
</form>
</div>
);
}
export default App;
この実装では、以下の様にデフォルトでフォームのバリデーションやEnterキーを使用した送信機能が付きます。
コンソールのログ出力を見るとわかるのですが、バリデーションが失敗しても送信処理(clickSubmit())が中断されるわけではない点には注意しましょう。
</>RED[]H2H3H4―↺↻ここに書いて
/**
* 送信ボタンクリック
* @param {*} e
*/
const clickSubmit = (e) => {
e.preventDefault();
console.log("送信されました");
// POST処理
}
formにバリデーションをつけたい場合にはformikなどを使って自分で実装すれば良いので、基本的に<form>タグは使わなくてOKです。