我有一个 React (15.5.4) 组件,有很多子组件,其中一些是 HTML 元素,一些是其他 React 组件。
我正在使用服务器渲染并且需要在服务器和客户端上具有相同的行为。客户端将使用 React 的生产版本。
我需要遍历子项并确定特定类型的 React 组件。所以我的第一个想法是迭代使用React.Children.forEach()
并查找组件名称。
React.Children.forEach(this.props.children, child => {
console.log('name =', child.name)
})
这似乎child.name
与child.displayName
不存在。
现在,child.type
存在,要么是一个字符串(对于 HTML 元素),"ul"
要么是一个函数(对于 React 组件)。
当它是一个函数时,我可以lodash/get
像这样使用const type = get(child, 'type.name', '')
来获取组件名称。但是,这似乎只适用于服务器,而不适用于客户端生产版本,它返回一个字符串:"t"
。看起来开发版本使用我的组件名称作为函数,但生产版本将其重命名为t()
. 所以我不能使用child.type.name
.
我如何:
- 迭代子组件并识别特定类型的组件..?
- 哪个在开发和生产 React 构建中都有效..?