2017-07-20 47 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

相關問題