React 组件 Key 应该有多独特?

IT技术 javascript reactjs
2021-04-17 04:41:03

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

如果后者为真,是否意味着 react diff 算法会在元素跨父组件移动时保留它?

2个回答

在其同级中是唯一的,因此直接在其父级之下。然而,父组件的子组件可以再次使用相同的键,因为最后,react 将从当前组件的键及其所有祖先的键中组合出完整的键。下面的示例仅包含自动生成的密钥,但如果您提供自己的密钥,则会改为使用它。

react ID

您可以在 Chrome 开发人员工具(标签元素)中查看组合 ID。

很酷,有道理,所以要回答第二个问题,将组件移到另一个父级会使其成为 React 完全不同的元素,并且会从头开始重新创建,对吗?
2021-06-22 04:41:03

是的,看起来像……如果你重新设置它的父级,它会给出不同的 reactid(例如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);
}

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

其他相关链接: 使用键识别 React.js 中的嵌套组件

我确实希望 React 有一些东西可以考虑超出同一级别的作用域/嵌套关键状态,但我想再次卸载/重新安装的性能应该不会太有害。