[解決済み] htmlのdata-reactid属性とは何ですか?
質問事項
いくつかのページのHTMLを調べていて、いくつかのページで "data-reactid" という属性が使われていることに気がつきました。
<a data-reactid="......" ></a>
この属性は何ですか、そしてその機能は何ですか?
どのように解決するのですか?
その
data-reactid
属性はカスタム属性で、以下のように使用されます。
リアクト
は、DOM 内でそのコンポーネントを一意に識別することができます。
これは重要なことで、Reactアプリケーションは サーバでレンダリングされる クライアントと同様に Reactは内部で、アプリケーションを構成するDOMノードへの参照表現を構築しています(以下、簡略化したもの)。
{
id: '.1oqi7occu80',
node: DivRef,
children: [
{
id: '.1oqi7occu80.0',
node: SpanRef,
children: [
{
id: '.1oqi7occu80.0.0',
node: InputRef,
children: []
}
]
}
]
}
サーバーとクライアントの間で実際のオブジェクト参照を共有する方法はなく、コンポーネントツリー全体のシリアライズ版を送信するのはコストがかかる可能性があります。アプリケーションがサーバーでレンダリングされ、クライアントでReactがロードされるとき、そのアプリケーションにある唯一のデータは
data-reactid
属性があります。
<div data-reactid='.loqi70ccu80'>
<span data-reactid='.loqi70ccu80.0'>
<input data-reactid='.loqi70ccu80.0' />
</span>
</div>
これを上記のデータ構造に戻すことができる必要があります。これを行うには、一意の
data-reactid
属性があります。これは
膨張
コンポーネントツリー
また、React がクライアントサイドでレンダリングする場合、クライアントサイドでレンダリングするために
data-reactid
属性は、その参照を失う必要はないにもかかわらず、です。ブラウザによっては、アプリケーションを DOM に挿入する際に
.innerHTML
を実行すると、パフォーマンス向上のため、コンポーネントツリーをすぐに展開します。
もう一つの興味深い違いは、クライアントサイドでレンダリングされたReactのidは、インクリメンタルな整数形式(例えば
.0.1.4.3
一方、サーバーでレンダリングされたものは、ランダムな文字列がプレフィックスとして付きます(例えば
.loqi70ccu80.1.4.3
). これは、アプリケーションが複数のサーバーでレンダリングされる可能性があり、衝突が起こらないようにすることが重要だからです。クライアントサイドでは、レンダリングプロセスは 1 つだけなので、カウンターを使用して一意の ID を確保することができます。
リアクト15
用途
document.createElement
代わりに
そのため、クライアントがレンダリングするマークアップには、これらの属性が含まれなくなります。
関連
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み] HTMLの "role "属性は何のためにあるのですか?
-
[解決済み】なぜHTMLは "chucknorris "を色と見なすのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングした
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】module.exports "モジュールが定義されていません"