フォームとバリデーション
フォームは Web アプリケーションにおいて、ユーザーからの入力を受け取る基本的な手段です。SolidJS を使用した効果的なフォーム管理では、リアクティブな状態管理と組み合わせて、ユーザー入力のバリデーション、送信処理、フィードバック表示を行います。このセクションでは、SolidJS でフォームを扱う基本的な方法を具体例を通じて紹介します。
フォームの作成と状態管理
- フォームコンポーネントの作成:
フォームを含むコンポーネントを作成し、ユーザー名と年齢を入力する簡単なフォームを定義します。src/components/UserForm.js
を作成し、以下のコードを追加します。import { createSignal } from 'solid-js'; function UserForm() { const [username, setUsername] = createSignal(''); const [age, setAge] = createSignal(''); const handleSubmit = (event) => { event.preventDefault(); // フォームのデフォルト送信動作を防止 console.log(`Submitted: ${username()}, ${age()}`); // ここでバリデーションやAPI呼び出しを行う }; return ( <form onSubmit={handleSubmit}> <div> <label htmlFor='username'>Username:</label> <input id='username' value={username()} onInput={(e) => setUsername(e.target.value)} /> </div> <div> <label htmlFor='age'>Age:</label> <input id='age' type='number' value={age()} onInput={(e) => setAge(e.target.value)} /> </div> <button type='submit'>Submit</button> </form> ); } export default UserForm;
このフォームは、ユーザー名と年齢の入力フィールドを持ち、それぞれの入力をリアクティブなシグナルで管理します。handleSubmit
関数はフォーム送信時に呼び出され、入力されたデータをコンソールにログ出力します。
バリデーションの追加
フォーム入力のバリデーションを追加して、ユーザーが適切なデータを入力していることを確認します。
- バリデーション関数の定義:
入力データのバリデーションロジックを追加します。例えば、ユーザー名が空でないこと、年齢が正の整数であることを確認する簡単なバリデーションを行います。function validateForm(username, age) { if (!username) { alert('Username is required'); return false; } if (age <= 0) { alert('Age must be a positive number'); return false; } return true; }
- 送信処理にバリデーションを組み込む:
handleSubmit
関数内で、バリデーション関数を呼び出して入力データを検証します。const handleSubmit = (event) => { event.preventDefault(); if (validateForm(username(), age())) { console.log(`Submitted: ${username()}, ${age()}`); // バリデーションが成功した場合の処理 } };
ユーザーフィードバックの提供
フォームのバリデーション結果に基づいてユーザーにフィードバックを提供することは、良いユーザー体験を実現する上で重要です。
- エラーメッセージの表示:
バリデーションエラーをユーザーに伝えるために、エラーメッセージを表示するロジックを追加します。const [errorMessage, setErrorMessage] = createSignal(''); function validateForm(username, age) { if (!username) { setErrorMessage('Username is required'); return false; } if (age <= 0) { setErrorMessage('Age must be a positive number'); return false; } setErrorMessage(''); // エラーがない場合はメッセージをクリア return true; }
フォーム内でエラーメッセージを表示するために、以下のように HTML に追加します。{ errorMessage() && <div class='error'>{errorMessage()}</div>; }