React组件Key应该有多独特?

时间:2015-10-30 05:00:11

标签: javascript reactjs

这是一个快速的问题:子键必须是唯一的范围是什么?这只是父组件还是整个应用程序?

如果后者为真,那么它是否意味着反应差异算法会在元素移动时保留一个元素?

2 个答案:

答案 0 :(得分:14)

在其兄弟姐妹中独一无二,所以直接在其父母之下。然而,父组件的子组可以再次使用相同的键,因为最终,react将组成当前组件及其所有祖先的键中的完整键。下面的示例仅包含自动生成的密钥,但如果您提供自己的密钥,则会使用它。

React ID's

您可以在Chrome开发者工具中找到合成ID(标签元素)。

答案 1 :(得分:1)

是的,看起来像......如果你重新加入它,它会给出不同的反应(例如http://webcloud.se/react-sortable/nested.html

并将再次卸载/重新安装。 ......

http://jsfiddle.net/46x0j6uq/1/

,componentWillUnmount: function() {
 //console.log("unmounted:", this.props);
 clearInterval(this.state.intervalId);
 clearTimeout(this.state.timeoutId);
}
,componentDidMount: function(){
  // console.log("mounted:", this.props);
  this.state.intervalId = setInterval(this.incrementCount, 1000);
 this.state.timeoutId = setTimeout(this.setColorToBlack, 300);
}

因此,最好不要在视图组件本身中存储状态,因为它可能会自行重置。上面的小提琴只是一个证明要点的演示。

其他相关链接: Using keys to identify nested components in React.js

我确实希望React能够考虑超出同一级别的范围/嵌套关键状态,但我想再次卸载/重新安装的性能应该不会太有害。