2017-10-11 1 views
0

J'utilise HOC et la méthode composer de Redux pour envelopper un composant dans les composants. Un exemple simple:Réagir HOC, instanceof, enveloppé avec?

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

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

Le résultat rendu par réaction est:

<theme> 
    <validator> 
    <textinput /> 

Imaginez un autre composant avec ces enfants:

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

Textinput et Select sont enveloppés dans les composants Thème/Validator avec HOC. Je veux énumérer chaque élément dans ce composant:

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

} 

Mais:

  1. Comment savoir si un élément rendu est enveloppé dans un composant spécifique (comme Validator ou thème)? Comment savoir si le composant derrière un élément est une instance de Select ou Textinput (et non Theme)?

+0

Si vous contrôlez les hocs, vous pouvez transmettre cette information vers le bas comme des accessoires aussi. Aussi, avez-vous essayé d'inspecter la propriété 'displayName' des enfants? –

Répondre

0

Une autre solution est d'ajouter une nouvelle propriété sur chaque objet HOC comme:

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

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