React 组件,使得组件的子组件可以是一种或多种特定类型

IT技术 reactjs
2021-05-14 07:59:13

我试图在 React 组件上声明类型检查,以便组件的子组件可以是一种或多种特定类型。

我在此处遵循 React 文档并将预期的 propType 声明为类型联合数组,但似乎这不起作用。我不确定我做错了什么,但代码会导致运行时错误,例如

"Warning: Failed prop type: Invalid prop `children` supplied to `Body`."

代码:

function Body(props) {
  return React.Children.count(props.children) > 0 && (
    <div className="body">
      {props.children}
    </div>
  );
}

Body.propTypes = {
  children: React.PropTypes.arrayOf(
    React.PropTypes.oneOfType([
      React.PropTypes.instanceOf(Content),
      React.PropTypes.instanceOf(Actions)
    ])
  )
};

<Body>
  <Content>...</Content>
  <Actions>...</Actions>
</Body>

谢谢,乔治

2个回答

你应该改用

Body.propTypes = {
  children: React.PropTypes.oneOfType([
      React.PropTypes.arrayOf(React.PropTypes.node),
      React.PropTypes.node
    ])
};

这告诉 reactchildren可以是一个或多个 JSX 节点。

你可以这样做:

Body.propTypes = {
  children: React.PropTypes.oneOfType([
    React.PropTypes.arrayOf(React.PropTypes.shape({
      type: React.PropTypes.oneOf([Content, Actions])
    })),
    React.PropTypes.shape({
      type: React.PropTypes.oneOf([Content, Actions])
    })
  ])
};

见小提琴:https : //jsfiddle.net/free_soul/oz71mu6g/2/


React.PropTypes.instanceOf实际上是使用 JavaScript 实现的instanceOf,它需要一个常规的 JavaScript “类”而不是 React 类。请参阅此处的讨论