当前位置: 首页 > 知识库问答 >
问题:

ReactJs:这个.props.children的道具类型应该是什么?

冀阳文
2023-03-14

给定一个呈现其子级的简单组件:

class ContainerComponent extends Component {
  static propTypes = {
    children: PropTypes.object.isRequired,
  }

  render() {
    return (
      <div>
        {this.props.children}
      </div>
    );
  }
}

export default ContainerComponent;

问题:儿童道具的道具类型应该是什么?

当我将其设置为对象时,当我使用具有多个子级的组件时,它会失败:

<ContainerComponent>
  <div>1</div>
  <div>2</div>
</ContainerComponent>

警告:失败的道具类型:提供给容器组件的数组类型的无效道具子对象

如果我将它设置为数组,如果我只给它一个子数组,它将失败,即:

<ContainerComponent>
  <div>1</div>
</ContainerComponent>

警告:失败的属性类型:提供给ContainerComponent的对象类型的属性子级无效,应为数组。

请告诉我,我是否应该省心做一个关于子元素的propTypes检查?


共有3个答案

丁慈
2023-03-14

PropTypes文档包含以下内容

// Anything that can be rendered: numbers, strings, elements or an array
// (or fragment) containing these types.
optionalNode: PropTypes.node,

因此,您可以使用PropTypes.node检查对象或对象数组

static propTypes = {
   children: PropTypes.node.isRequired,
}
巫马山
2023-03-14

对我来说,这取决于组件。如果您知道需要填充的内容,则应尝试使用以下方法以独占方式指定或指定多种类型:

PropTypes.oneOfType 

如果您想引用React组件,那么您将查找

PropTypes.element

虽然

PropTypes.node

描述任何可以呈现的内容-字符串、数字、元素或这些内容的数组。如果这适合你,那么这就是方法。

对于非常通用的组件,可以有多种类型的子组件,您也可以使用以下组件-尽管请记住,eslint和ts可能不满意这种缺乏特异性的情况:

PropTypes.any
林德惠
2023-03-14

使用oneOfTypePropTypes.node

import PropTypes from 'prop-types'

...

static propTypes = {
    children: PropTypes.oneOfType([
        PropTypes.arrayOf(PropTypes.node),
        PropTypes.node
    ]).isRequired
}

static propTypes = {
    children: PropTypes.node.isRequired,
}
 类似资料:
  • 问题内容: 给定一个呈现其子级的简单组件: 问题:孩子道具的propType应该是什么? 当我将其设置为对象时,当我将组件与多个子级一起使用时,它将失败: 警告:无法道具类型:无效的支柱型的 供给,预计。 如果将其设置为数组,则如果我仅给其一个孩子,则它将失败,即: 警告:prop类型失败:提供给ContainerComponent的对象类型无效的prop子代,预期数组。 请告知,我是否不应该为子

  • 情况: 我想做的事: 问题: 我只能指定一个propType?我如何允许两种不同的道具组合成一种? 谢谢

  • 这与自定义Gradle Java插件在V5.2.1中崩溃有关,但在V4.7中工作?。警告-我不是Java程序员。 我有这个代码来实现一个插件,它崩溃了(根据其他帖子)。

  • 我有一个组件,根据其大小接收道具。道具可以是字符串或数字,例如:或。 我能让知道这可以是PropTypes验证中的一个或另一个吗? 如果未指定类型,则会收到警告: prop type无效;它必须是一个函数,通常来自React。道具类型。

  • 我有一个非常简单的功能组件,如下所示: 还有一个组件: 我不断收到以下错误: [ts]JSX元素类型“ReactNode”不是JSX元素的构造函数。类型“未定义”不能分配给类型“元素类”。[2605] 如何正确键入?

  • 我目前正在通过做rosalind问题(基本上是一堆生物信息学相关的代码katas)来学习Go。 我当前表示的DNA链类型为: 我最初的原因是封装字节片,这样我就知道它只包含代表核苷酸的字节:。我意识到这显然不是瓜分,因为我可以简单地做到: 由于我的结构只包含一个字节数组,这样做是否更好/更理想: 还是让类型包含dna链更好?对于何时使用这两种方法中的任何一种,有什么经验法则吗?