我在将键控元素发送到子元素时遇到问题,该子元素将按键过滤掉这些子元素。我们的想法是通过键将处理程序映射到子项,处理程序将切换键以进行过滤。我知道使用索引作为关键是反模式,但是这里发生了什么?我总是收到错误"Warning: Each child in an array or iterator should have a unique "key" prop.
render: function() {
return (
<Frame>
<Frame>
<Navbar isLoggedIn={true} handlers={this.handlers}>
{this.props.children.map(function(child, i) {
return (
<button onClick={this.handlers[i]}>{child.props.text || 'Checkout item ' + i}</button>
)
}.bind(this))}
</Navbar>
</Frame>
{this.props.isLoading
? <Loading />
: <Filter
filter={function(child) {
return String(this.props.displayed) === child.key;
}.bind(this)}>
{this.props.children.map(function(child, i) {
return (<div key={i}><child /></div>)
})}
</Filter>}
</Frame>
)
}
function Filter (props) {
return (
<div>
{Array.isArray(props)
? props.children.filter(function(child) {
return props.filter(child);
})
: props.children}
</div>
)
};
答案 0 :(得分:2)
您需要将密钥传递给正在迭代的任何DOM元素。 <button>
中缺少您。
<Navbar isLoggedIn={true} handlers={this.handlers}>
{this.props.children.map(function(child, i) {
return (
<button key={i} onClick={this.handlers[i]}>{child.props.text || 'Checkout item ' + i}</button>
)
}.bind(this))}
</Navbar>