React TypeScriptでinput要素のonChangeイベントを扱う
Typescriptでinput要素のonChangeイベントを扱う方法
概要
イベントオブジェクトの型を指定する
この方法は、イベントオブジェクトの型をReact.ChangeEvent<HTMLInputElement>
に指定することで、event.target.value
にアクセスできるようになります。
const [value, setValue] = useState('');
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setValue(e.target.value);
};
return (
<input type="text" value={value} onChange={handleChange} />
);
as属性を使う
この方法は、input
要素のas
属性にHTMLInputElement
を指定することで、event.target
をHTMLInputElement
型として扱えるようになります。
const [value, setValue] = useState('');
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setValue(e.target.value);
};
return (
<input type="text" value={value} onChange={handleChange} as={HTMLInputElement} />
);
どちらの方法でも、input
要素のonChange
イベントを扱うことができます。どちらを使うかは、コードの読みやすさや好みによって判断してください。
補足
event.target.value
は、string
型の値になります。event.target
は、HTMLInputElement
型のオブジェクトになります。
import React, { useState } from 'react';
const App: React.FC = () => {
const [value, setValue] = useState('');
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setValue(e.target.value);
};
return (
<div>
<input type="text" value={value} onChange={handleChange} />
<p>入力された値: {value}</p>
</div>
);
};
export default App;
useState
を使って、value
という状態変数を初期値""で初期化します。input
要素のonChange
イベントに、handleChange
という関数を設定します。handleChange
関数では、イベントオブジェクトe
を受け取り、e.target.value
から入力された値を取得します。- 取得した値を
value
状態変数にセットします。 p
要素で、value
状態変数の値を表示します。
このコードを参考に、input
要素のonChange
イベントを扱ってみてください。
Typescriptでinput要素のonChangeイベントを扱う方法
これまで紹介した方法
- イベントオブジェクトの型を指定する
as
属性を使う
上記以外にも、input
要素のonChange
イベントを扱う方法はいくつかあります。
- useRefフックを使う
useRef
フックを使って、input
要素の値を保持することができます。
const inputRef = useRef('');
const handleChange = () => {
setValue(inputRef.current.value);
};
return (
<input type="text" ref={inputRef} onChange={handleChange} />
);
- useStateフックとuseEffectフックを使う
const [value, setValue] = useState('');
useEffect(() => {
const inputElement = document.getElementById('my-input');
inputElement.addEventListener('change', handleChange);
return () => {
inputElement.removeEventListener('change', handleChange);
};
}, []);
const handleChange = () => {
const inputElement = document.getElementById('my-input');
setValue(inputElement.value);
};
return (
<input type="text" id="my-input" value={value} />
);
どの方法を使うべきかは、状況やコードの書きやすさによって判断してください。
input
要素のonChange
イベントを扱う方法はいくつかあります。紹介した方法を参考に、状況やコードの書きやすさによって適切な方法を選んでください。
reactjs typescript types