2017-10-11 70 views
0

我使用HOC和Redux的组合方法将组件包装到组件中。一个简单的例子:React HOC,instanceof,包装?

const Textinput = class Textinput extends Component { 
    ... 
} 

export default compose(
    Theme, 
    Validator, 
)(Textinput); 

通过反应呈现的结果是:

<theme> 
    <validator> 
    <textinput /> 

想象与此儿童另一个组件:

<Textinput /> 
<span>Test</span> 
<Select /> 
<br/> 

TextInput和选择被包裹在主题/验证器组件与HOC。我想列举的每个元素在这个组件:

const children = React.Children.map(this.props.children, (child) => { 

} 

但是:

  1. 如何知道一个呈现的元素被包裹在一个特定的组件(如验证或主题)?

  2. 如何知道元素后面的组件是Select或Textinput(而不是主题)的实例?

+0

如果你控制了肝卵圆细胞,您可以向下道具传递信息了。另外,你有没有尝试检查孩子的'displayName'属性? –

回答

0

另一种解决方案是在每个HOC对象上添加新特性,如:

Theme.innerInstances = { 
    instance: WrappedComponent, 
    innerInstances: WrappedComponent.innerInstances, 
}; 

Validator.innerInstances = { 
    instance: WrappedComponent, 
    innerInstances: WrappedComponent.innerInstances, 
};