web-dev-qa-db-ja.com

Reactキーが文字列に限定されているのはなぜですか?

Reactでは、list/array/iterableの要素からReact要素へのマッピングをレンダリングする場合、各要素にローカルで一意のキーをアタッチする必要があります。通常、これは要素が変更または削除された場合、Reactは、リスト全体ではなく特定の要素のみを再レンダリングする必要があります。このキーは文字列である必要があり、要素固有のキーが近づいていない場合は、それらを生成するためのnpmパッケージ*( shortid )があります。

React設計者が不変の値を許可するのではなく、この要件を設定したのはなぜですか?特に、 Symbol を使用できることは私にとって理にかなっています=、これは一意の文字列に変換できません(Symbolを使用したいという特定のケースを再検討したところ、それが不要であることに気付きましたが、問題は依然として一般的です)。


*以前はこれのために特別に設計されたreact-key-indexというパッケージもありましたが、githubから消えたようです。

1
dx_over_dt

ReactはHTMLにキーを書き込み、DOMを解析するときにそれを読み戻します。

HTML属性は文字列であるため、指定する値はすべて文字列にシリアル化する必要があります。

非文字列を使用したい場合は、キー値のタイプを示すために、HTMLエレメントにde/serialiserおよびおそらく2番目の属性が必要になります。

また、これは本質的に最適化であるため、変更のたびにHTML全体を再生成する必要はありません。したがって、プロセスを遅くするようなことは望ましくありません。

4
Ewan