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

PropTypes组件检查流中的等效项

周超英
2023-03-14

给定使用PropType的以下代码(请参阅本期)

const SomeComponent = ({comp}) => {...}

SomeComponent.propTypes = { 
  comp: PropTypes.shape({
    type: PropTypes.oneOf([SomeOtherComponent])
  })
}

使用流类型的等价物是什么?

我只知道:

const SomeComponent = ({comp}: {comp: React$Element<any>}) => {...}

使用这个作为参考,但这将允许comp成为任何React组件。

如何键入检查道具以确保它是使用Flow的特定React组件的实例?

共有2个答案

鞠修雅
2023-03-14

从流量0.53开始,这可以使用React来完成。要素

颜文昌
2023-03-14

简短回答:您不能。React元素是在运行时创建的,流只能使用通过自身静态分析获得的数据,而静态分析的功能不足以确定将用于在运行时创建React元素的组件类。这很复杂,主要是因为用于创建元素的组件类只能在运行时定义。允许Flow尝试确定元素的运行时类型将不可避免地使它运行在使用您想要的组件完全有效的情况下,但Flow不允许您这样做。

如果要检查组件道具的类型,请在运行时按照本问题中的说明进行检查。您可以通过使用一个指示“开发模式”的全局变量来禁用这种签入生产。例如:

 function elementIsOfType(element, typeName) {
   if (!__DEV__) {
     return true;
   }
   return element.type.displayName === typeName;
 }

然后,您可以将__DEV__变量设置为false来禁用所有运行时检查。

 类似资料:
  • 问题内容: 如何验证提供的道具是组件类(不是实例)? 例如 问题答案: 对于使用新功能的任何人,都会在此拉取请求中添加并于2019年2月10日发布。 该prop类型支持所有组件(本机组件,无状态组件,有状态组件,前向引用,上下文提供者/消费者)。 并且当所有元素都不是时,它会发出警告,并且传递的prop是元素()而不是类型时,它也会发出警告。 最后,您可以像使用其他道具类型一样使用它:

  • 我有一个问题的PropTypes定义在反应,我定义的类型的doc_count_error_upper_bound字段的类型是类型的数字,但它得到检查对类型的对象。我假设某个地方的PropTypes定义由于某种原因而崩溃,因为数据和定义似乎都是正确的,其他字段都被处理得很好。 该应用程序由一系列组件组成,这些组件组织成反应网格布局https://github.com/STRML/react-grid

  • 随着应用规模的提升,你可以通过类型检测捕捉更多的bug。对于部分应用,你可能需要使用类似于Flow或者TypeScript的JavaScript扩展来对你整个应用类型进行类型检测。但即使你不使用这些,React内置了类型检测的功能。要在组件中进行类型检测,你可以赋值propTypes属性。 class Greeting extends React.Component { render() {

  • 问题内容: 我有以下表达: …其中元素类型为: 是否可以在过滤器之前检查类型? 问题答案: 您可以应用另一个以仅保留实例,并添加一个将为您节省以后的转换: 或者,正如Holger所说,如果您喜欢那种样式,可以用方法引用替换lambda表达式:

  • 问题内容: 在Python 3中,我正在检查给定值是否为三角形,也就是说,对于某个正整数n,它可以表示为n(n + 1)/ 2 我可以写: 还是我需要这样做?: 我检查了两个函数对于x的返回结果是否相同,直到1,000,000。但是我不确定一般来说int(x)== x是否总是可以正确确定一个数字是否为整数,因为例如5表示为4.99999999999997等。 据我所知,第二种方法是正确的方法,如果

  • 问题内容: 有没有办法检查两个(非平凡的)选择是否等效? 最初,我希望两个选择在形式上等效,但是proving-sql-query-equivalency中的答案使 我停滞不前。 对于我的实际需要,我可以只检查两个选择的(实际)结果是否相同。 问题答案: 如果要比较查询结果,请尝试以下操作: 这将导致所有行仅由查询之一返回。