Chr*_*s O 20 javascript select option reactjs
有人可以解释如何解决此错误
警告:flattenChildren(...):遇到两个孩子用同一把钥匙
我在下面复制了我的代码,但由于某种原因,CodePen没有显示错误.
var FilterOptions = React.createClass({
changeOption: function(type, e) {
var val = e.target.value;
this.props.changeOption(val, type);
},
render: function() {
return (
<div className="filter-options">
<div className="filter-option">
<select id="product" name="Product" value={this.props.product} onChange={this.changeOption.bind(this, 'product')}>
<option value=''>Product</option>
{this.props.productOptions.map(function(option) {
return (<option key={option} value={option}>{option}</option>)
})}
</select>
</div>
</div>
);
}
});
Run Code Online (Sandbox Code Playgroud)
作为第二个问题,我很确定我的重置应该重置选择框的值,但这也不起作用,只是重置渲染结果 - 不确定这是否与第一个问题有关?
任何帮助非常感谢
小智 27
使用索引作为关键不是一个好主意.关键是React用于识别DOM元素的唯一方法.如果您将项目推送到列表或删除中间的某些内容会发生什么?如果密钥与之前相同,则React假定DOM元素表示与以前相同的组件.但那不再是真的.来自:https://medium.com/@robinpokorny/index-as-a-key-is-an-anti-pattern-e0349aece318
最好使用您映射的每个项目中的唯一字符串作为键.类似于<option key={value.id}>或者如果某个键不存在,可以通过执行类似的操作来创建唯一标识符<option key={value.name + value.description}>.
Chr*_*s O 13
添加索引作为固定的值.感谢@azium为你的sugegstion.
<select id="product" name="Product" value={this.props.product} onChange={this.changeOption.bind(this, 'product')}>
<option value=''>Product</option>
{this.props.productOptions.map(function(option, value) {
return (<option key={value} value={option}>{option}</option>)
})}
</select>
Run Code Online (Sandbox Code Playgroud)
我非常喜欢通过将索引与一些常量值相结合来使用密钥,而不是使用key={value.name + value.description}:
key={'some-constant-value'+index}
Run Code Online (Sandbox Code Playgroud)
这是因为我可以通过密钥知道它是哪个组件的。例如。<ComponentA key={'compoent-a-'+i} />。另外,我遵循这种方法是因为简单的 html 约定与我们给出的类似id="my-some-of-the-id"。
因此,即使您想使用名称和描述作为键,您也可以这样使用:
key={'some-constant-'+value.name+'-'+value.description}
Run Code Online (Sandbox Code Playgroud)
这只是一个意见。不过,我在编写 props 值时遵循 html 约定。
| 归档时间: |
|
| 查看次数: |
40212 次 |
| 最近记录: |