[解決済み】React.jsの配列の子要素のユニークキーを理解する
質問
JSONデータソースを受け取り、ソート可能なテーブルを作成するReactコンポーネントを構築しています。
動的なデータ行にはそれぞれ一意のキーが割り当てられていますが、それでもerror ofが発生します。
配列の各子要素は、一意の "key" プロパティを持つ必要があります。
TableComponentのrenderメソッドを確認します。
私の
TableComponent
render メソッドが返ります。
<table>
<thead key="thead">
<TableHeader columns={columnNames}/>
</thead>
<tbody key="tbody">
{ rows }
</tbody>
</table>
は
TableHeader
コンポーネントは1つの行であり、また一意のキーが割り当てられています。
それぞれの
row
で
rows
は、一意のキーを持つコンポーネントから構築されます。
<TableRowItem key={item.id} data={item} columns={columnNames}/>
そして
TableRowItem
はこのようになります。
var TableRowItem = React.createClass({
render: function() {
var td = function() {
return this.props.columns.map(function(c) {
return <td key={this.props.data[c]}>{this.props.data[c]}</td>;
}, this);
}.bind(this);
return (
<tr>{ td(this.props.item) }</tr>
)
}
});
ユニークキープロップエラーの原因は何ですか?
解決方法は?
各子供にキーを追加する必要があります と、その中の各要素 .
こうすることで、Reactは最小限のDOMの変化を処理することができます。
あなたのコードでは、それぞれの
<TableRowItem key={item.id} data={item} columns={columnNames}/>
は、その中のいくつかの子をキーなしでレンダリングしようとしています。
確認 この例 .
を削除してみてください。
key={i}
から
<b></b>
要素をdivの中に入れる(そしてコンソールを確認する)。
サンプルでは、キーを与えずに
<b>
要素を更新し
のみ
その
object.city
の場合、React は要素だけでなく行全体を再レンダリングする必要があります。
以下はそのコードです。
var data = [{name:'Jhon', age:28, city:'HO'},
{name:'Onhj', age:82, city:'HN'},
{name:'Nohj', age:41, city:'IT'}
];
var Hello = React.createClass({
render: function() {
var _data = this.props.info;
console.log(_data);
return(
<div>
{_data.map(function(object, i){
return <div className={"row"} key={i}>
{[ object.name ,
// remove the key
<b className="fosfo" key={i}> {object.city} </b> ,
object.age
]}
</div>;
})}
</div>
);
}
});
React.render(<Hello info={data} />, document.body);
が投稿した回答 クリス には、この回答よりもさらに詳細な説明があります。 ぜひご覧ください。 https://stackoverflow.com/a/43892905/2325522
Reactのドキュメントで、和解におけるキーの重要性について。 キー
関連
-
[解決済み】webpack-dev-serverにリモート接続すると、「Invalid Host header」というメッセージが表示されます。
-
[解決済み】警告。配列またはイテレータの各子供は、一意の「キー」プロパティを持つ必要があります。ListView`のレンダリングメソッドを確認する。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み] [Solved] Uncaught Invariant Violation: 前のレンダリング中よりも多くのフックをレンダリングする
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】JavaScriptで':'(コロン)は何をするのか?
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。