イベントへの応答
React では、JSX にイベントハンドラを追加できます。イベントハンドラとはあなた自身で書く関数であり、クリック、ホバー、フォーム入力へのフォーカスといったユーザインタラクションに応答してトリガされます。
このページで学ぶこと
- イベントハンドラを記述するさまざまな方法
- 親コンポーネントからイベント処理ロジックを渡す方法
- イベントの伝播のしかたとそれを停止する方法
イベントハンドラの追加
イベントハンドラを追加するには、まず関数を定義し、適切な JSX タグに props の一部として渡します。例として、以下にまだ何もしないボタンを示します。
export default function Button() { return ( <button> I don't do anything </button> ); }
ユーザがクリックするとメッセージが表示されるようにするには、以下の 3 つの手順を実行します。
Buttonコンポーネントの内部でhandleClickという関数を宣言します。- その関数内にロジックを実装します(ここでは
alertを使ってメッセージを表示)。 <button>の JSX にonClick={handleClick}を追加します。
export default function Button() { function handleClick() { alert('You clicked me!'); } return ( <button onClick={handleClick}> Click me </button> ); }
handleClick 関数を定義し、それを <button> に props の一部として渡しました。この handleClick がイベントハンドラです。イベントハンドラ関数は:
- 通常、コンポーネントの内部で定義されます。
- イベント名の先頭に
handleが付いた名前にします。
慣習的に、イベントハンドラは handle の後ろにイベントの名称をつなげた名前にすることが一般的です。onClick={handleClick}、onMouseEnter={handleMouseEnter} などがよく見られます。
また、JSX の中でイベントハンドラをインラインで定義することもできます。
<button onClick={function handleClick() {
alert('You clicked me!');
}}>または、より簡潔にアロー関数を使って記述することもできます。
<button onClick={() => {
alert('You clicked me!');
}}>これらのスタイルはすべて同等です。インラインのイベントハンドラは、短い関数の場合に便利です。
イベントハンドラでの props の読み取り
イベントハンドラはコンポーネント内に宣言されているため、コンポーネントの props にアクセスできます。以下は、クリックされたときに message プロパティの内容をアラートで表示するボタンです。
function AlertButton({ message, children }) { return ( <button onClick={() => alert(message)}> {children} </button> ); } export default function Toolbar() { return ( <div> <AlertButton message="Playing!"> Play Movie </AlertButton> <AlertButton message="Uploading!"> Upload Image </AlertButton> </div> ); }