まず、エラーの原因を分析しましょう。Reactでは、フォームフィールドの値は通常、stateに格納されます。しかし、type=number
属性を使用すると、数値以外の値が入力されると、その値は空の文字列(''
)になります。そして、空の文字列を数値として処理しようとすると、エラーが発生します。
このエラーを解決するためには、以下のようなシンプルで簡単な方法があります。
- フォームの入力値を事前にチェックする:
onChange
イベントハンドラを使用して、入力された値が数値であるかどうかをチェックします。正しい形式でない場合は、エラーメッセージを表示するなどの処理を行います。
// コンポーネント内の状態
state = {
inputValue: '',
error: ''
};
// 入力値の変更時のイベントハンドラ
handleChange = (event) => {
const value = event.target.value;
if (isNaN(value)) {
this.setState({ error: '数値を入力してください。' });
} else {
this.setState({ inputValue: value, error: '' });
}
};
// レンダリング
render() {
const { inputValue, error } = this.state;
return (
<div>
<input
type="number"
value={inputValue}
onChange={this.handleChange}
/>
{error && <div>{error}</div>}
</div>
);
}
- フォームの送信時にバリデーションを行う: フォームが送信される際に、入力値が数値であるかを再度チェックします。送信時にエラーがある場合は、フォームの送信を中止し、エラーメッセージを表示します。
// コンポーネント内の状態
state = {
inputValue: '',
error: ''
};
// フォームの送信時のイベントハンドラ
handleSubmit = (event) => {
event.preventDefault();
const { inputValue } = this.state;
if (isNaN(inputValue)) {
this.setState({ error: '数値を入力してください。' });
} else {
// フォームの送信処理
// ...
}
};
// レンダリング
render() {
const { inputValue, error } = this.state;
return (
<form onSubmit={this.handleSubmit}>
<input
type="number"
value={inputValue}
onChange={this.handleChange}
/>
{error && <div>{error}</div>}
<button type="submit">送信</button>
</form>
);
}
これらの方法を使用すると、ユーザーが数値以外の値を入力した際にエラーを処理することができます。また、具体的なエラーメッセージやエラーのスタイリングは、プロジェクトの要件やデザインに応じてカスタマイズしてください。