我正在构建一个接受JSON数据源并创建可排序表的React组件。
每个动态数据行都有一个分配给它的唯一键,但是我仍然遇到以下错误:
数组中的每个子代都应具有唯一的“键”道具。
检查TableComponent的渲染方法。
我的TableComponent
渲染方法返回:
<table>
<thead key="thead">
<TableHeader columns={columnNames}/>
</thead>
<tbody key="tbody">
{ rows }
</tbody>
</table>
该TableHeader
组件是单行,并且还为其分配了唯一的键。
每个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>
)
}
});
是什么导致独特的按键道具错误?
这是一个警告,但是解决此问题将使Reacts渲染速度更快,
This is because
React
needs to uniquely identify each items in the list. Lets say if the state of an element of that list changes in ReactsVirtual DOM
then React needs to figure out which element got changed and where in the DOM it needs to change so that browser DOM will be in sync with the Reacts Virtual DOM.As a solution just introduce a
key
attribute to eachli
tag. Thiskey
should be a unique value to each element.