2017-07-20 49 views
1

如果我有这样的结构:React - 如何确定特定的子组件是否存在?

const MyComponent = (props) => { 
    return (
     <Wrapper />{props.children}</Wrapper> 
    ); 
} 

,我使用它是这样的:

<MyComponent> 
    <SomeInnerComponent /> 
</MyComponent> 

我如何检查,看看<MyComponent></MyComponent>之间是否<SomeInnerComponent />已明确被列入,从MyComponent函数内?

+0

你想检查是否存在特定的'SomeInnerComponent'或者普通的它有一些儿童 –

+0

特别是'SomeInnerComponent'存在。 – JoeTidee

回答

3

既然你要检查SomeInnerComponent存在作为一个孩子或没有,你可以做以下

const MyComponent = (props) => { 
    for (let child in props.children){ 
     if (props.children[child].type.displayName === 'SomeInnerComponent'){ 
      console.log("SomeInnerComponent is present as a child"); 
     } 
    } 
    return (
     <Wrapper />{props.children}</Wrapper> 
    ); 
} 

或者你可以有你的组件上的propTypes验证

MyComponent.propTypes: { 
    children: function (props, propName, componentName) { 
     var error; 
     var childProp = props[propName]; 
     var flag = false; 

     React.Children.forEach(childProp, function (child) { 
     if (child.type.displayName === 'SomeInnerComponent') { 
      flag = true 
     } 
     }); 
     if(flag === false) { 
      error = new Error(componentName + ' does not exist!' 
     ); 
     } 
     return error; 
    } 
    }, 
+1

应该提到,使用样式组件时这些方法不起作用。 'displayName'包含'styled.div'。 – JoeTidee

+0

感谢您的指定,但我诚实地不知道,因此我没有提到:) –

+0

当然,只是提及它以备将来参考。如果你有这方面的知识可以做到这一点,那么有一个全面的答案, – JoeTidee

相关问题