React - 如何确定特定的子组件是否存在?

Joe*_*dee 3 children reactjs

如果我有这个结构:

const MyComponent = (props) => {
    return (
        <Wrapper />{props.children}</Wrapper>
    );
}
Run Code Online (Sandbox Code Playgroud)

我这样使用它:

<MyComponent>
    <SomeInnerComponent />
</MyComponent>
Run Code Online (Sandbox Code Playgroud)

如何检查功能内部是否<SomeInnerComponent />包含特定内容?<MyComponent></MyComponent>MyComponent

Shu*_*tri 5

鉴于您要检查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>
    );
}
Run Code Online (Sandbox Code Playgroud)

或者您可以在组件上进行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;
    }
  },
Run Code Online (Sandbox Code Playgroud)

  • 你可以试试这个`some.ner.prototype instanceof SomeInnerComponent` (2认同)