mex

2021.07.13

react-guiが話題になってた。なんか軽量でよく使われるhooksとコンポーネントまとめみたいな感じ。
The library integrates directly with the native DOM event system (i.e., it does not use React DOM’s synthetic event system); this provides excellent flexibility and performance, as well as broad compatibility with alternative renderers.
SyntheticEventではなくてネイティブなDOMEventを使うらしい。ていうかSyntheticEventってこんなにあったんだ。
合成イベント (SyntheticEvent) - React
このリファレンスガイドでは、React のイベントシステムの一部を構成する SyntheticEvent(合成イベント)ラッパについて説明します。詳細については、 イベント処理 ガイドを参照してください。 イベントハンドラには、 SyntheticEvent のインスタンスが渡されます。これはブラウザのネイティブイベントに対するクロスブラウザ版のラッパです。 stopPropagation() と preventDefault() を含む、ブラウザのネイティブイベントと同じインターフェイスを持ちつつ、ブラウザ間で同じ挙動をするようになっています。 何らかの理由で実際のブラウザイベントが必要な場合は、単に nativeEvent 属性を使用するだけで取得できます。合成イベントはブラウザのネイティブイベントとは別物であり、直接の対応があるわけでもありません。例えば onMouseLeave イベントの場合、 event.nativeEvent は mouseout イベントになっています。個々の対応については公開 API の範疇ではなく、常に変わる可能性があります。すべての SyntheticEvent オブジェクトは以下の属性を持っています。 補足 v17 以降、 SyntheticEvent は プーリングされなくなったため、 e.persist() は何も行わなくなります。 補足 v0.14 以降、イベントハンドラから false を返してもイベントの伝播は止まりません。代わりに、 e.stopPropagation() または e.preventDefault() を手動で呼び出す必要があります。 React は異なるブラウザ間でも一貫したプロパティを持つようにイベントを正規化します。 以下のイベントハンドラはイベント伝搬のバブリングフェーズで呼び出されます。キャプチャフェーズのイベントハンドラを登録するには、イベント名に Capture を追加します。たとえば、キャプチャフェーズでクリックイベントを処理するには onClick の代わりに onClickCapture
合成イベント (SyntheticEvent) - React
ReactのEventの仕組みはEvent delegationで実現されているらしいから、それをやめてネイティブなDOMEvent使うことでパフォーマンス向上するってことかしら。まぁ実際のコード見てみないとわからないんですが。
ReactがネイティブなDOMEventを使ってないの理由は↓。仮想DOMはそういうものなのかもしれん。preactはネイティブらしいけど。