<div>
のような、組み込みのブラウザコンポーネントはすべて、いくつかの共通の props とイベントをサポートしています。
- リファレンス
- 共通コンポーネント (例:
<div>
) ref
コールバック関数- React イベントオブジェクト
AnimationEvent
ハンドラ関数ClipboardEvent
ハンドラ関数CompositionEvent
ハンドラ関数DragEvent
ハンドラ関数FocusEvent
ハンドラ関数Event
ハンドラ関数InputEvent
ハンドラ関数KeyboardEvent
ハンドラ関数MouseEvent
ハンドラ関数PointerEvent
ハンドラ関数TouchEvent
ハンドラ関数TransitionEvent
ハンドラ関数UIEvent
ハンドラ関数WheelEvent
ハンドラ関数
- 共通コンポーネント (例:
- 使用法
リファレンス
共通コンポーネント (例: <div>
)
<div className="wrapper">Some content</div>
Props
これらの特別なReact propsは、すべての組み込みコンポーネントでサポートされています
-
children
: Reactノード(要素、文字列、数値、ポータル、null
、undefined
、およびブール値のような空のノード、または他のReactノードの配列)。コンポーネント内のコンテンツを指定します。JSXを使用する場合、通常、<div><span /></div>
のようにタグをネストすることで、children
propsを暗黙的に指定します。 -
dangerouslySetInnerHTML
:{ __html: '<p>some html</p>' }
の形式のオブジェクトで、中に生のHTML文字列が入っています。DOMノードのinnerHTML
プロパティを上書きし、渡されたHTMLを内部に表示します。これは非常に注意して使用する必要があります!内部のHTMLが信頼できない場合(例えば、ユーザーデータに基づく場合)、XSS脆弱性を導入するリスクがあります。dangerouslySetInnerHTML
の使用についてさらに詳しく読んでください。 -
ref
:useRef
またはcreateRef
からのrefオブジェクト、またはref
コールバック関数、またはレガシーrefs用の文字列。このノードのDOM要素がrefに設定されます。refsを使ったDOMの操作についてさらに詳しく読んでください。 -
suppressContentEditableWarning
: ブール値。true
の場合、children
とcontentEditable={true}
の両方を持つ要素に対してReactが表示する警告を抑制します(通常、これらは一緒に機能しません)。contentEditable
の内容を手動で管理するテキスト入力ライブラリを構築する場合に使用します。 -
suppressHydrationWarning
: ブール値。サーバーレンダリングを使用する場合、通常、サーバーとクライアントが異なるコンテンツをレンダリングすると警告が表示されます。一部のまれなケース(タイムスタンプなど)では、完全に一致させることは非常に困難または不可能です。suppressHydrationWarning
をtrue
に設定すると、Reactはその要素の属性と内容の不一致について警告しません。これは1レベルの深さでのみ機能し、エスケープハッチとして使用することを目的としています。過度に使用しないでください。ハイドレーションエラーの抑制について読んでください。 -
style
: CSSスタイルを持つオブジェクト。例えば、{ fontWeight: 'bold', margin: 20 }
のような形式です。DOMのstyle
プロパティと同様に、CSSプロパティ名はcamelCase
で記述する必要があります。例えば、font-weight
の代わりにfontWeight
とします。値として文字列または数値を渡すことができます。数値(例えば、width: 100
)を渡すと、Reactはそれが単位のないプロパティでない限り、値に自動的にpx
(「ピクセル」)を追加します。style
は、スタイルの値を事前に知らない動的なスタイルにのみ使用することをお勧めします。それ以外の場合は、className
でプレーンなCSSクラスを適用する方が効率的です。className
とstyle
の適用についてさらに詳しく読んでください。
これらの標準的なDOMプロパティは、すべての組み込みコンポーネントでもサポートされています。
accessKey
: 文字列。要素のキーボードショートカットを指定します。一般的にはお勧めしません。aria-*
: ARIA属性を使用すると、この要素のアクセシビリティツリー情報を指定できます。完全なリファレンスについては、ARIA属性を参照してください。Reactでは、すべてのARIA属性名はHTMLとまったく同じです。autoCapitalize
: 文字列。ユーザー入力の大文字化を行うかどうかと、その方法を指定します。className
: 文字列。要素のCSSクラス名を指定します。CSSスタイルの適用についてさらに詳しく読んでください。contentEditable
: ブール値です。true
の場合、ブラウザはユーザーがレンダリングされた要素を直接編集できるようにします。これは、Lexicalのようなリッチテキスト入力ライブラリを実装するために使用されます。Reactは、contentEditable={true}
を持つ要素にReactの子を渡そうとすると警告します。これは、ユーザーが編集した後、Reactがコンテンツを更新できなくなるためです。data-*
: データ属性を使用すると、要素に文字列データを付加できます。たとえば、data-fruit="banana"
などです。Reactでは、通常はpropsまたはstateからデータを読み取るため、あまり使用されません。dir
:'ltr'
または'rtl'
のいずれかです。要素のテキストの方向を指定します。draggable
: ブール値です。要素がドラッグ可能かどうかを指定します。HTML Drag and Drop APIの一部です。enterKeyHint
: 文字列です。仮想キーボードのEnterキーで表示するアクションを指定します。htmlFor
: 文字列です。<label>
および<output>
の場合、ラベルを特定のコントロールに関連付けることができます。for
HTML属性と同じです。Reactは、HTML属性名ではなく、標準のDOMプロパティ名(htmlFor
)を使用します。hidden
: ブール値または文字列です。要素を非表示にするかどうかを指定します。id
: 文字列です。この要素の一意の識別子を指定します。これは、後で要素を検索したり、他の要素と接続したりするために使用できます。同じコンポーネントの複数のインスタンス間で衝突を避けるために、useId
で生成してください。is
: 文字列です。指定した場合、コンポーネントはカスタム要素のように動作します。inputMode
: 文字列です。表示するキーボードの種類(テキスト、数字、電話など)を指定します。itemProp
: 文字列です。構造化データクローラーに対して、要素がどのプロパティを表すかを指定します。lang
: 文字列です。要素の言語を指定します。onAnimationEnd
:AnimationEvent
ハンドラ関数です。CSSアニメーションが完了したときに発生します。onAnimationEndCapture
:onAnimationEnd
のキャプチャフェーズで発生するバージョンです。onAnimationIteration
:AnimationEvent
ハンドラ関数です。CSSアニメーションの反復が終了し、次の反復が開始されたときに発生します。onAnimationIterationCapture
:onAnimationIteration
のキャプチャフェーズで発生するバージョンです。onAnimationStart
:AnimationEvent
ハンドラ関数です。CSSアニメーションが開始したときに発生します。onAnimationStartCapture
:onAnimationStart
ですが、キャプチャフェーズで発生します。onAuxClick
:MouseEvent
ハンドラー関数です。プライマリ以外のポインターボタンがクリックされたときに発生します。onAuxClickCapture
:onAuxClick
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onBeforeInput
:InputEvent
ハンドラー関数です。編集可能な要素の値が変更される前に発生します。React はまだネイティブのbeforeinput
イベントを使用しておらず、代わりに他のイベントを使用してポリフィルを試みます。onBeforeInputCapture
:onBeforeInput
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onBlur
:FocusEvent
ハンドラー関数です。要素がフォーカスを失ったときに発生します。組み込みのブラウザblur
イベントとは異なり、React ではonBlur
イベントはバブリングします。onBlurCapture
:onBlur
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onClick
:MouseEvent
ハンドラー関数です。ポインティングデバイスのプライマリボタンがクリックされたときに発生します。onClickCapture
:onClick
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onCompositionStart
:CompositionEvent
ハンドラー関数です。インプットメソッドエディターが新しいコンポジションセッションを開始したときに発生します。onCompositionStartCapture
:onCompositionStart
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onCompositionEnd
:CompositionEvent
ハンドラー関数です。インプットメソッドエディターがコンポジションセッションを完了またはキャンセルしたときに発生します。onCompositionEndCapture
:onCompositionEnd
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onCompositionUpdate
:CompositionEvent
ハンドラー関数です。インプットメソッドエディターが新しい文字を受け取ったときに発生します。onCompositionUpdateCapture
:onCompositionUpdate
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onContextMenu
:MouseEvent
ハンドラー関数です。ユーザーがコンテキストメニューを開こうとしたときに発生します。onContextMenuCapture
:onContextMenu
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onCopy
:ClipboardEvent
ハンドラー関数です。ユーザーが何かをクリップボードにコピーしようとしたときに発生します。onCopyCapture
:onCopy
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズで発生します。onCut
:ClipboardEvent
ハンドラー関数です。ユーザーが何かをクリップボードにカットしようとしたときに発生します。onCutCapture
:onCut
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDoubleClick
:MouseEvent
ハンドラ関数です。ユーザーがダブルクリックしたときに発火します。ブラウザのdblclick
イベントに対応します。onDoubleClickCapture
:onDoubleClick
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDrag
:DragEvent
ハンドラ関数です。ユーザーが何かをドラッグしている間、発火します。onDragCapture
:onDrag
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDragEnd
:DragEvent
ハンドラ関数です。ユーザーが何かをドラッグするのを止めたときに発火します。onDragEndCapture
:onDragEnd
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDragEnter
:DragEvent
ハンドラ関数です。ドラッグされたコンテンツが有効なドロップターゲットに入ったときに発火します。onDragEnterCapture
:onDragEnter
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDragOver
:DragEvent
ハンドラ関数です。ドラッグされたコンテンツが有効なドロップターゲット上をドラッグされている間、発火します。ドロップを許可するには、ここでe.preventDefault()
を呼び出す必要があります。onDragOverCapture
:onDragOver
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDragStart
:DragEvent
ハンドラ関数です。ユーザーが要素のドラッグを開始したときに発火します。onDragStartCapture
:onDragStart
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onDrop
:DragEvent
ハンドラ関数です。有効なドロップターゲットに何かがドロップされたときに発火します。onDropCapture
:onDrop
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onFocus
:FocusEvent
ハンドラ関数です。要素がフォーカスを受け取ったときに発火します。ブラウザの組み込みのfocus
イベントとは異なり、React ではonFocus
イベントはバブリングします。onFocusCapture
:onFocus
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onGotPointerCapture
:PointerEvent
ハンドラ関数です。要素がプログラムでポインタをキャプチャしたときに発火します。onGotPointerCaptureCapture
:onGotPointerCapture
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onKeyDown
:KeyboardEvent
ハンドラ関数です。キーが押されたときに発火します。onKeyDownCapture
:onKeyDown
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズについてを参照してください。onKeyPress
:KeyboardEvent
ハンドラー関数。非推奨です。onKeyDown
またはonBeforeInput
を代わりに使用してください。onKeyPressCapture
:onKeyPress
のキャプチャフェーズで発生するバージョン。onKeyUp
:KeyboardEvent
ハンドラー関数。キーが離されたときに発生します。onKeyUpCapture
:onKeyUp
のキャプチャフェーズで発生するバージョン。onLostPointerCapture
:PointerEvent
ハンドラー関数。要素がポインターのキャプチャを停止したときに発生します。onLostPointerCaptureCapture
:onLostPointerCapture
のキャプチャフェーズで発生するバージョン。onMouseDown
:MouseEvent
ハンドラー関数。ポインターが押されたときに発生します。onMouseDownCapture
:onMouseDown
のキャプチャフェーズで発生するバージョン。onMouseEnter
:MouseEvent
ハンドラー関数。ポインターが要素内に入ったときに発生します。キャプチャフェーズはありません。代わりに、onMouseLeave
とonMouseEnter
は、離れる要素から入る要素へと伝播します。onMouseLeave
:MouseEvent
ハンドラー関数。ポインターが要素外に出たときに発生します。キャプチャフェーズはありません。代わりに、onMouseLeave
とonMouseEnter
は、離れる要素から入る要素へと伝播します。onMouseMove
:MouseEvent
ハンドラー関数。ポインターの座標が変更されたときに発生します。onMouseMoveCapture
:onMouseMove
のキャプチャフェーズで発生するバージョン。onMouseOut
:MouseEvent
ハンドラー関数。ポインターが要素外に移動したとき、または子要素に移動したときに発生します。onMouseOutCapture
:onMouseOut
のキャプチャフェーズで発生するバージョン。onMouseUp
:MouseEvent
ハンドラー関数。ポインターが離されたときに発生します。onMouseUpCapture
:onMouseUp
のキャプチャフェーズで発生するバージョン。onPointerCancel
:PointerEvent
ハンドラー関数。ブラウザがポインターの操作をキャンセルしたときに発生します。onPointerCancelCapture
:onPointerCancel
のキャプチャフェーズで発生するバージョン。onPointerDown
:PointerEvent
ハンドラ関数。ポインターがアクティブになったときに発火します。onPointerDownCapture
:onPointerDown
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onPointerEnter
:PointerEvent
ハンドラ関数。ポインターが要素内に入ったときに発火します。キャプチャフェーズはありません。代わりに、onPointerLeave
とonPointerEnter
は、離れる要素から入る要素へと伝播します。onPointerLeave
:PointerEvent
ハンドラ関数。ポインターが要素外に出たときに発火します。キャプチャフェーズはありません。代わりに、onPointerLeave
とonPointerEnter
は、離れる要素から入る要素へと伝播します。onPointerMove
:PointerEvent
ハンドラ関数。ポインターの座標が変化したときに発火します。onPointerMoveCapture
:onPointerMove
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onPointerOut
:PointerEvent
ハンドラ関数。ポインターが要素外に出た場合、ポインター操作がキャンセルされた場合、およびその他のいくつかの理由で発火します。onPointerOutCapture
:onPointerOut
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onPointerUp
:PointerEvent
ハンドラ関数。ポインターがアクティブでなくなったときに発火します。onPointerUpCapture
:onPointerUp
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onPaste
:ClipboardEvent
ハンドラ関数。ユーザーがクリップボードから何かを貼り付けようとしたときに発火します。onPasteCapture
:onPaste
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onScroll
:Event
ハンドラ関数。要素がスクロールされたときに発火します。このイベントはバブリングしません。onScrollCapture
:onScroll
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onSelect
:Event
ハンドラ関数。入力などの編集可能な要素内の選択範囲が変更された後に発火します。React は、onSelect
イベントをcontentEditable={true}
要素でも動作するように拡張しています。さらに、React は空の選択や編集(選択に影響を与える可能性のあるもの)でも発火するように拡張しています。onSelectCapture
:onSelect
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onTouchCancel
:TouchEvent
ハンドラー関数。ブラウザがタッチ操作をキャンセルしたときに発火します。onTouchCancelCapture
:onTouchCancel
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onTouchEnd
:TouchEvent
ハンドラー関数。1つ以上のタッチポイントが取り除かれたときに発火します。onTouchEndCapture
:onTouchEnd
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onTouchMove
:TouchEvent
ハンドラー関数。1つ以上のタッチポイントが移動したときに発火します。onTouchMoveCapture
:onTouchMove
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onTouchStart
:TouchEvent
ハンドラー関数。1つ以上のタッチポイントが配置されたときに発火します。onTouchStartCapture
:onTouchStart
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onTransitionEnd
:TransitionEvent
ハンドラー関数。CSSトランジションが完了したときに発火します。onTransitionEndCapture
:onTransitionEnd
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。onWheel
:WheelEvent
ハンドラー関数。ユーザーがホイールボタンを回転させたときに発火します。onWheelCapture
:onWheel
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズ。role
: 文字列。支援技術のために要素の役割を明示的に指定します。slot
: 文字列。シャドウDOMを使用する際のslot名を指定します。Reactでは、同等のパターンは通常、JSXをpropsとして渡すことで実現されます。例:<Layout left={<Sidebar />} right={<Content />} />
。spellCheck
: 真偽値またはnull。true
またはfalse
に明示的に設定した場合、スペルチェックを有効または無効にします。tabIndex
: 数値。Tabボタンのデフォルトの動作を上書きします。-1
および0
以外の値の使用は避けてください。title
: 文字列。要素のツールチップテキストを指定します。translate
:'yes'
または'no'
のいずれか。'no'
を渡すと、要素の内容が翻訳から除外されます。
カスタム属性をpropsとして渡すこともできます。例:mycustomprop="someValue"
。これは、サードパーティのライブラリと統合する場合に役立ちます。カスタム属性の名前は小文字で、on
で始まることはできません。値は文字列に変換されます。null
または undefined
を渡すと、カスタム属性は削除されます。
これらのイベントは、<form>
要素に対してのみ発生します。
onReset
:Event
ハンドラー関数。フォームがリセットされたときに発生します。onResetCapture
:onReset
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。onSubmit
:Event
ハンドラー関数。フォームが送信されたときに発生します。onSubmitCapture
:onSubmit
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。
これらのイベントは、<dialog>
要素に対してのみ発生します。ブラウザのイベントとは異なり、React ではバブリングします。
onCancel
:Event
ハンドラー関数。ユーザーがダイアログを閉じようとしたときに発生します。onCancelCapture
:onCancel
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。onClose
:Event
ハンドラー関数。ダイアログが閉じられたときに発生します。onCloseCapture
:onClose
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。
これらのイベントは、<details>
要素に対してのみ発生します。ブラウザのイベントとは異なり、React ではバブリングします。
onToggle
:Event
ハンドラー関数。ユーザーが詳細を切り替えたときに発生します。onToggleCapture
:onToggle
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。
これらのイベントは、<img>
、<iframe>
、<object>
、<embed>
、<link>
、および SVG <image>
要素に対して発生します。ブラウザのイベントとは異なり、React ではバブリングします。
onLoad
:Event
ハンドラー関数。リソースのロードが完了したときに発生します。onLoadCapture
:onLoad
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。onError
:Event
ハンドラー関数。リソースをロードできなかったときに発生します。onErrorCapture
:onError
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。
これらのイベントは、<audio>
や <video>
のようなリソースに対して発生します。ブラウザのイベントとは異なり、React ではバブリングします。
onAbort
:Event
ハンドラー関数。リソースが完全にロードされなかったが、エラーによるものではない場合に発生します。onAbortCapture
:onAbort
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onCanPlay
:Event
ハンドラー関数です。再生を開始するのに十分なデータがあるが、バッファリングなしで最後まで再生するには十分ではない場合に発火します。onCanPlayCapture
:onCanPlay
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onCanPlayThrough
:Event
ハンドラー関数です。バッファリングなしで最後まで再生を開始できる可能性が高い場合に発火します。onCanPlayThroughCapture
:onCanPlayThrough
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onDurationChange
:Event
ハンドラー関数です。メディアの長さが更新されたときに発火します。onDurationChangeCapture
:onDurationChange
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onEmptied
:Event
ハンドラー関数です。メディアが空になったときに発火します。onEmptiedCapture
:onEmptied
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onEncrypted
:Event
ハンドラー関数です。ブラウザが暗号化されたメディアを検出したときに発火します。onEncryptedCapture
:onEncrypted
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onEnded
:Event
ハンドラー関数です。再生するものがなくなったために再生が停止したときに発火します。onEndedCapture
:onEnded
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onError
:Event
ハンドラー関数。リソースをロードできなかったときに発生します。onErrorCapture
:onError
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズを参照してください。onLoadedData
:Event
ハンドラー関数です。現在の再生フレームがロードされたときに発火します。onLoadedDataCapture
:onLoadedData
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onLoadedMetadata
:Event
ハンドラー関数です。メタデータがロードされたときに発火します。onLoadedMetadataCapture
:onLoadedMetadata
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onLoadStart
:Event
ハンドラー関数です。ブラウザがリソースのロードを開始したときに発火します。onLoadStartCapture
:onLoadStart
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onPause
:Event
ハンドラー関数です。メディアが一時停止されたときに発火します。onPauseCapture
:onPause
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onPlay
:Event
ハンドラー関数です。メディアが一時停止されなくなったときに発火します。onPlayCapture
:onPlay
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズイベントを参照してください。onPlaying
:Event
ハンドラー関数。メディアの再生が開始または再開されたときに発生します。onPlayingCapture
:onPlaying
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onProgress
:Event
ハンドラー関数。リソースのロード中に定期的に発生します。onProgressCapture
:onProgress
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onRateChange
:Event
ハンドラー関数。再生速度が変更されたときに発生します。onRateChangeCapture
:onRateChange
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onResize
:Event
ハンドラー関数。動画のサイズが変更されたときに発生します。onResizeCapture
:onResize
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onSeeked
:Event
ハンドラー関数。シーク操作が完了したときに発生します。onSeekedCapture
:onSeeked
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onSeeking
:Event
ハンドラー関数。シーク操作が開始されたときに発生します。onSeekingCapture
:onSeeking
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onStalled
:Event
ハンドラー関数。ブラウザがデータを待っているがロードされ続けないときに発生します。onStalledCapture
:onStalled
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onSuspend
:Event
ハンドラー関数。リソースのロードが中断されたときに発生します。onSuspendCapture
:onSuspend
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onTimeUpdate
:Event
ハンドラー関数。現在の再生時間が更新されたときに発生します。onTimeUpdateCapture
:onTimeUpdate
のキャプチャフェーズで発生するバージョンです。キャプチャフェーズ。onVolumeChange
:Event
ハンドラー関数。音量が変更されたときに発生します。onVolumeChangeCapture
:onVolumeChange
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズを参照してください。onWaiting
:Event
ハンドラー関数です。一時的なデータ不足により再生が停止した場合に発火します。onWaitingCapture
:onWaiting
のキャプチャフェーズで発火するバージョンです。キャプチャフェーズを参照してください。
注意事項
children
とdangerouslySetInnerHTML
を同時に渡すことはできません。- 一部のイベント (
onAbort
やonLoad
など) はブラウザではバブリングしませんが、React ではバブリングします。
ref
コールバック関数
ref オブジェクト (例えば、useRef
によって返されるもの) の代わりに、関数を ref
属性に渡すことができます。
<div ref={(node) => {
console.log('Attached', node);
return () => {
console.log('Clean up', node)
}
}}>
<div>
DOM ノードが画面に追加されると、React は DOM node
を引数として ref
コールバックを呼び出します。その <div>
DOM ノードが削除されると、React はコールバックから返されたクリーンアップ関数を呼び出します。
React は、異なる ref
コールバックを渡すたびに、ref
コールバックも呼び出します。上記の例では、(node) => { ... }
はレンダリングごとに異なる関数です。コンポーネントが再レンダリングされると、以前の 関数は引数として null
を渡して呼び出され、次の 関数は DOM ノードを渡して呼び出されます。
パラメーター
node
: DOM ノード。React は ref がアタッチされると DOM ノードを渡します。レンダリングごとにref
コールバックに同じ関数参照を渡さない限り、コールバックはコンポーネントの再レンダリングごとに一時的にクリーンアップされ、再作成されます。
戻り値
- 任意
クリーンアップ関数
:ref
がデタッチされると、React はクリーンアップ関数を呼び出します。ref
コールバックによって関数が返されない場合、React はref
がデタッチされるときに、引数としてnull
を渡してコールバックを再度呼び出します。この動作は将来のバージョンで削除されます。
注意事項
- 厳格モードがオンの場合、React は最初の実際のセットアップの前に、開発専用の追加のセットアップとクリーンアップのサイクルを 1 回実行します。これは、クリーンアップロジックがセットアップロジックを「ミラーリング」し、セットアップが行っていることを停止または取り消すことを保証するストレステストです。これにより問題が発生する場合は、クリーンアップ関数を実装してください。
- 異なる
ref
コールバックを渡すと、React は提供されている場合は以前のコールバックのクリーンアップ関数を呼び出します。クリーンアップ関数が定義されていない場合、ref
コールバックは引数としてnull
を渡して呼び出されます。次の関数は DOM ノードを渡して呼び出されます。
Reactイベントオブジェクト
イベントハンドラーはReactイベントオブジェクトを受け取ります。これは「合成イベント」とも呼ばれます。
<button onClick={e => {
console.log(e); // React event object
}} />
これは、基盤となるDOMイベントと同じ標準に準拠していますが、一部のブラウザの非互換性を修正します。
一部のReactイベントは、ブラウザのネイティブイベントに直接マッピングされません。たとえば、onMouseLeave
では、e.nativeEvent
はmouseout
イベントを指します。特定のマッピングはパブリックAPIの一部ではなく、将来変更される可能性があります。何らかの理由で基盤となるブラウザイベントが必要な場合は、e.nativeEvent
から読み取ってください。
プロパティ
Reactイベントオブジェクトは、標準のEvent
プロパティの一部を実装します。
bubbles
: ブール値。イベントがDOMをバブリングするかどうかを返します。cancelable
: ブール値。イベントをキャンセルできるかどうかを返します。currentTarget
: DOMノード。Reactツリーで現在のハンドラーがアタッチされているノードを返します。defaultPrevented
: ブール値。preventDefault
が呼び出されたかどうかを返します。eventPhase
: 数値。イベントが現在どのフェーズにあるかを返します。isTrusted
: ブール値。イベントがユーザーによって開始されたかどうかを返します。target
: DOMノード。イベントが発生したノード(遠い子ノードである可能性もあります)を返します。timeStamp
: 数値。イベントが発生した時刻を返します。
さらに、Reactイベントオブジェクトは次のプロパティを提供します
nativeEvent
: DOMEvent
。元のブラウザイベントオブジェクト。
メソッド
Reactイベントオブジェクトは、標準のEvent
メソッドの一部を実装します。
preventDefault()
: イベントのブラウザのデフォルトアクションを防止します。stopPropagation()
: Reactツリーを介したイベントの伝播を停止します。
さらに、Reactイベントオブジェクトは次のメソッドを提供します
isDefaultPrevented()
:preventDefault
が呼び出されたかどうかを示すブール値を返します。isPropagationStopped()
:stopPropagation
が呼び出されたかどうかを示すブール値を返します。persist()
: React DOMでは使用されません。React Nativeでは、イベント後にイベントのプロパティを読み取るためにこれを呼び出します。isPersistent()
: React DOMでは使用されません。React Nativeでは、persist
が呼び出されたかどうかを返します。
注意点
currentTarget
、eventPhase
、target
、およびtype
の値は、Reactコードが期待する値を反映しています。内部的には、Reactはルートにイベントハンドラーをアタッチしますが、これはReactイベントオブジェクトには反映されません。たとえば、e.currentTarget
は、基盤となるe.nativeEvent.currentTarget
と同じではない可能性があります。ポリフィルされたイベントの場合、e.type
(Reactイベントタイプ)は、e.nativeEvent.type
(基盤となるタイプ)と異なる場合があります。
AnimationEvent
ハンドラー関数
CSS アニメーションイベントのイベントハンドラーの型です。
<div
onAnimationStart={e => console.log('onAnimationStart')}
onAnimationIteration={e => console.log('onAnimationIteration')}
onAnimationEnd={e => console.log('onAnimationEnd')}
/>
パラメーター
e
: これらの追加のAnimationEvent
プロパティを持つReact イベントオブジェクト
ClipboardEvent
ハンドラー関数
クリップボード API イベントのイベントハンドラーの型です。
<input
onCopy={e => console.log('onCopy')}
onCut={e => console.log('onCut')}
onPaste={e => console.log('onPaste')}
/>
パラメーター
-
e
: これらの追加のClipboardEvent
プロパティを持つReact イベントオブジェクト
CompositionEvent
ハンドラー関数
インプットメソッドエディター (IME) イベントのイベントハンドラーの型です。
<input
onCompositionStart={e => console.log('onCompositionStart')}
onCompositionUpdate={e => console.log('onCompositionUpdate')}
onCompositionEnd={e => console.log('onCompositionEnd')}
/>
パラメーター
e
: これらの追加のCompositionEvent
プロパティを持つReact イベントオブジェクト
DragEvent
ハンドラー関数
HTML ドラッグアンドドロップ API イベントのイベントハンドラーの型です。
<>
<div
draggable={true}
onDragStart={e => console.log('onDragStart')}
onDragEnd={e => console.log('onDragEnd')}
>
Drag source
</div>
<div
onDragEnter={e => console.log('onDragEnter')}
onDragLeave={e => console.log('onDragLeave')}
onDragOver={e => { e.preventDefault(); console.log('onDragOver'); }}
onDrop={e => console.log('onDrop')}
>
Drop target
</div>
</>
パラメーター
-
e
: これらの追加のDragEvent
プロパティを持つReact イベントオブジェクトまた、継承された
MouseEvent
プロパティも含まれていますaltKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
また、継承された
UIEvent
プロパティも含まれます。
FocusEvent
ハンドラー関数
フォーカスイベントのイベントハンドラーの型。
<input
onFocus={e => console.log('onFocus')}
onBlur={e => console.log('onBlur')}
/>
パラメーター
-
e
: これらの追加のFocusEvent
プロパティを持つReactイベントオブジェクトまた、継承された
UIEvent
プロパティも含まれます。
Event
ハンドラー関数
汎用イベントのイベントハンドラーの型。
パラメーター
e
: 追加のプロパティを持たないReactイベントオブジェクト。
InputEvent
ハンドラー関数
onBeforeInput
イベントのイベントハンドラーの型。
<input onBeforeInput={e => console.log('onBeforeInput')} />
パラメーター
e
: これらの追加のInputEvent
プロパティを持つReactイベントオブジェクト
KeyboardEvent
ハンドラー関数
キーボードイベントのイベントハンドラーの型。
<input
onKeyDown={e => console.log('onKeyDown')}
onKeyUp={e => console.log('onKeyUp')}
/>
パラメーター
-
e
: これらの追加のKeyboardEvent
プロパティを持つReactイベントオブジェクトaltKey
charCode
code
ctrlKey
getModifierState(key)
key
keyCode
locale
metaKey
location
repeat
shiftKey
which
また、継承された
UIEvent
プロパティも含まれます。
MouseEvent
ハンドラー関数
マウスイベントのイベントハンドラーの型。
<div
onClick={e => console.log('onClick')}
onMouseEnter={e => console.log('onMouseEnter')}
onMouseOver={e => console.log('onMouseOver')}
onMouseDown={e => console.log('onMouseDown')}
onMouseUp={e => console.log('onMouseUp')}
onMouseLeave={e => console.log('onMouseLeave')}
/>
パラメータ
-
e
: 追加のReactイベントオブジェクトと、以下のMouseEvent
プロパティを持つ。altKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
また、継承された
UIEvent
プロパティも含まれます。
PointerEvent
ハンドラー関数
ポインターイベントのイベントハンドラーの型。
<div
onPointerEnter={e => console.log('onPointerEnter')}
onPointerMove={e => console.log('onPointerMove')}
onPointerDown={e => console.log('onPointerDown')}
onPointerUp={e => console.log('onPointerUp')}
onPointerLeave={e => console.log('onPointerLeave')}
/>
パラメータ
-
e
: 追加のReactイベントオブジェクトと、以下のPointerEvent
プロパティを持つ。また、継承された
MouseEvent
プロパティも含まれていますaltKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
また、継承された
UIEvent
プロパティも含まれます。
TouchEvent
ハンドラー関数
タッチイベントのイベントハンドラーの型。
<div
onTouchStart={e => console.log('onTouchStart')}
onTouchMove={e => console.log('onTouchMove')}
onTouchEnd={e => console.log('onTouchEnd')}
onTouchCancel={e => console.log('onTouchCancel')}
/>
パラメータ
-
e
: 追加のReactイベントオブジェクトと、以下のTouchEvent
プロパティを持つ。また、継承された
UIEvent
プロパティも含まれます。
TransitionEvent
ハンドラー関数
CSS transition イベントのイベントハンドラーの型。
<div
onTransitionEnd={e => console.log('onTransitionEnd')}
/>
パラメータ
e
: 追加のReactイベントオブジェクトと、以下のTransitionEvent
プロパティを持つ。
UIEvent
ハンドラー関数
汎用的なUIイベントのイベントハンドラーの型。
<div
onScroll={e => console.log('onScroll')}
/>
パラメータ
e
: 追加のReactイベントオブジェクトと、以下のUIEvent
プロパティを持つ。
WheelEvent
ハンドラー関数
onWheel
イベントのイベントハンドラーの型です。
<div
onWheel={e => console.log('onWheel')}
/>
パラメーター
-
e
: これらの追加のReactイベントオブジェクトには、WheelEvent
プロパティがあります。また、継承された
MouseEvent
プロパティも含まれていますaltKey
button
buttons
ctrlKey
clientX
clientY
getModifierState(key)
metaKey
movementX
movementY
pageX
pageY
relatedTarget
screenX
screenY
shiftKey
また、継承された
UIEvent
プロパティも含まれます。
使用法
CSSスタイルの適用
Reactでは、className
でCSSクラスを指定します。 これは、HTMLのclass
属性と同様に機能します。
<img className="avatar" />
次に、別のCSSファイルにそのCSSルールを記述します。
/* In your CSS */
.avatar {
border-radius: 50%;
}
Reactは、CSSファイルの追加方法を指定していません。最も簡単な場合は、HTMLに<link>
タグを追加します。ビルドツールまたはフレームワークを使用する場合は、そのドキュメントを参照して、プロジェクトにCSSファイルを追加する方法を確認してください。
場合によっては、スタイル値がデータに依存することがあります。style
属性を使用して、いくつかのスタイルを動的に渡します。
<img
className="avatar"
style={{
width: user.imageSize,
height: user.imageSize
}}
/>
上記の例では、style={{}}
は特別な構文ではなく、style={ }
JSXの中括弧の中にある通常の{}
オブジェクトです。スタイルがJavaScript変数に依存する場合にのみ、style
属性を使用することをお勧めします。
export default function Avatar({ user }) { return ( <img src={user.imageUrl} alt={'Photo of ' + user.name} className="avatar" style={{ width: user.imageSize, height: user.imageSize }} /> ); }
詳細
CSSクラスを条件付きで適用するには、JavaScriptを使用してclassName
文字列を自分で生成する必要があります。
たとえば、className={'row ' + (isSelected ? 'selected': '')}
は、isSelected
がtrue
であるかどうかによって、className="row"
またはclassName="row selected"
を生成します。
これをより読みやすくするために、classnames
のような小さなヘルパーライブラリを使用できます。
import cn from 'classnames';
function Row({ isSelected }) {
return (
<div className={cn('row', isSelected && 'selected')}>
...
</div>
);
}
複数の条件付きクラスがある場合に特に便利です
import cn from 'classnames';
function Row({ isSelected, size }) {
return (
<div className={cn('row', {
selected: isSelected,
large: size === 'large',
small: size === 'small',
})}>
...
</div>
);
}
refを使用したDOMノードの操作
JSX内のタグに関連付けられたブラウザのDOMノードを取得する必要がある場合があります。例えば、ボタンがクリックされたときに<input>
にフォーカスを当てたい場合、ブラウザの<input>
DOMノードでfocus()
を呼び出す必要があります。
タグのブラウザDOMノードを取得するには、refを宣言し、そのタグにref
属性として渡します。
import { useRef } from 'react';
export default function Form() {
const inputRef = useRef(null);
// ...
return (
<input ref={inputRef} />
// ...
Reactは、画面にレンダリングされた後、DOMノードをinputRef.current
に格納します。
import { useRef } from 'react'; export default function Form() { const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return ( <> <input ref={inputRef} /> <button onClick={handleClick}> Focus the input </button> </> ); }
refsを使ったDOMの操作とその他の例についてもっと読む。
より高度なユースケースでは、ref
属性はコールバック関数も受け入れます。
危険なinnerHTMLの設定
次のように、生のHTML文字列を要素に渡すことができます。
const markup = { __html: '<p>some raw html</p>' };
return <div dangerouslySetInnerHTML={markup} />;
これは危険です。基礎となるDOMのinnerHTML
プロパティと同様に、細心の注意を払う必要があります!マークアップが完全に信頼できるソースから提供されていない限り、このようにXSSの脆弱性を導入するのは簡単です。
たとえば、MarkdownをHTMLに変換するMarkdownライブラリを使用する場合、そのパーサーにバグが含まれておらず、ユーザーが自分の入力のみを表示することを確認すれば、次のように結果のHTMLを表示できます。
import { Remarkable } from 'remarkable'; const md = new Remarkable(); function renderMarkdownToHTML(markdown) { // This is ONLY safe because the output HTML // is shown to the same user, and because you // trust this Markdown parser to not have bugs. const renderedHTML = md.render(markdown); return {__html: renderedHTML}; } export default function MarkdownPreview({ markdown }) { const markup = renderMarkdownToHTML(markdown); return <div dangerouslySetInnerHTML={markup} />; }
{__html}
オブジェクトは、上記の例でrenderMarkdownToHTML
関数が行っているように、HTMLが生成される場所にできるだけ近い場所に作成する必要があります。これにより、コードで使用されているすべての生のHTMLが明示的にマークされ、HTMLが含まれることが予想される変数のみがdangerouslySetInnerHTML
に渡されるようになります。 <div dangerouslySetInnerHTML={{__html: markup}} />
のようにインラインでオブジェクトを作成することは推奨されません。
任意のHTMLをレンダリングするのが危険な理由を確認するには、上記のコードを次のコードに置き換えてください。
const post = {
// Imagine this content is stored in the database.
content: `<img src="" onerror='alert("you were hacked")'>`
};
export default function MarkdownPreview() {
// 🔴 SECURITY HOLE: passing untrusted input to dangerouslySetInnerHTML
const markup = { __html: post.content };
return <div dangerouslySetInnerHTML={markup} />;
}
HTMLに埋め込まれたコードが実行されます。ハッカーは、このセキュリティホールを利用して、ユーザー情報を盗んだり、ユーザーの代わりにアクションを実行したりする可能性があります。信頼できるサニタイズされたデータでのみdangerouslySetInnerHTML
を使用してください。
マウスイベントの処理
この例は、いくつかの一般的なマウスイベントとそれらがいつ発生するかを示しています。
export default function MouseExample() { return ( <div onMouseEnter={e => console.log('onMouseEnter (parent)')} onMouseLeave={e => console.log('onMouseLeave (parent)')} > <button onClick={e => console.log('onClick (first button)')} onMouseDown={e => console.log('onMouseDown (first button)')} onMouseEnter={e => console.log('onMouseEnter (first button)')} onMouseLeave={e => console.log('onMouseLeave (first button)')} onMouseOver={e => console.log('onMouseOver (first button)')} onMouseUp={e => console.log('onMouseUp (first button)')} > First button </button> <button onClick={e => console.log('onClick (second button)')} onMouseDown={e => console.log('onMouseDown (second button)')} onMouseEnter={e => console.log('onMouseEnter (second button)')} onMouseLeave={e => console.log('onMouseLeave (second button)')} onMouseOver={e => console.log('onMouseOver (second button)')} onMouseUp={e => console.log('onMouseUp (second button)')} > Second button </button> </div> ); }
export default function PointerExample() { return ( <div onPointerEnter={e => console.log('onPointerEnter (parent)')} onPointerLeave={e => console.log('onPointerLeave (parent)')} style={{ padding: 20, backgroundColor: '#ddd' }} > <div onPointerDown={e => console.log('onPointerDown (first child)')} onPointerEnter={e => console.log('onPointerEnter (first child)')} onPointerLeave={e => console.log('onPointerLeave (first child)')} onPointerMove={e => console.log('onPointerMove (first child)')} onPointerUp={e => console.log('onPointerUp (first child)')} style={{ padding: 20, backgroundColor: 'lightyellow' }} > First child </div> <div onPointerDown={e => console.log('onPointerDown (second child)')} onPointerEnter={e => console.log('onPointerEnter (second child)')} onPointerLeave={e => console.log('onPointerLeave (second child)')} onPointerMove={e => console.log('onPointerMove (second child)')} onPointerUp={e => console.log('onPointerUp (second child)')} style={{ padding: 20, backgroundColor: 'lightblue' }} > Second child </div> </div> ); }
フォーカスイベントの処理
Reactでは、フォーカスイベントはバブルします。currentTarget
とrelatedTarget
を使用すると、フォーカスまたはブラーイベントが親要素の外から発生したかどうかを区別できます。この例では、子にフォーカスを当てる方法、親要素にフォーカスを当てる方法、サブツリー全体を出入りするフォーカスを検出する方法を示します。
export default function FocusExample() { return ( <div tabIndex={1} onFocus={(e) => { if (e.currentTarget === e.target) { console.log('focused parent'); } else { console.log('focused child', e.target.name); } if (!e.currentTarget.contains(e.relatedTarget)) { // Not triggered when swapping focus between children console.log('focus entered parent'); } }} onBlur={(e) => { if (e.currentTarget === e.target) { console.log('unfocused parent'); } else { console.log('unfocused child', e.target.name); } if (!e.currentTarget.contains(e.relatedTarget)) { // Not triggered when swapping focus between children console.log('focus left parent'); } }} > <label> First name: <input name="firstName" /> </label> <label> Last name: <input name="lastName" /> </label> </div> ); }
export default function KeyboardExample() { return ( <label> First name: <input name="firstName" onKeyDown={e => console.log('onKeyDown:', e.key, e.code)} onKeyUp={e => console.log('onKeyUp:', e.key, e.code)} /> </label> ); }