React 踩坑
React.Children
的方法会替换原来的 key
值
在为 @zora/adapter-ant-design
基于 Ant Design 封装 Tabs
组件时,需要遍历 props.children
从自己封装的 TabPane
组件实例获取信息再传给 Ant Design 的 TabPane
。
一开始是用 React.Children.map
处理,发现选项卡在未点击时不会出现选中状态,通过开发者工具才发现,生成组件的 key
值不是我指定的:

在外部使用我封装的 TabPane
时传的值是:

我封装的 Tabs
组件里在 React.Children.map
中返回:

大概浏览了下 Ant Design 和 rc-tabs
的源码并断点调试后推断应该是 React 的特性引起的,将 React.Children.map
改成 props.children.map
后果然好了!
在查看 React 源码后发现 React.Children
的方法会将原来的 key
值替换掉:

综上所述,需要遍历 props.children
并要保留外部传入的 key
值不变时使用 props.children.map
替代 React.Children.map
(其他方法同理)。