如果我有这个结构:
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
鉴于您要检查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)