【问题标题】:Is Flow replace PropTypes?Flow 会取代 PropTypes 吗?
【发布时间】:2018-11-22 15:53:01
【问题描述】:

我正在使用 React with Flow。如果我在渲染时忘记设置一些需要的道具,Flow 会给我错误,所以我可以防止这个问题。

但是 Flow 实际上并没有在运行时工作。因此,如果我使用的值被视为数字不是数字,Flow 就无法捕捉到这一点。例如,如果值来自其他地方,比如服务器端,并且它是字符串,但 Flow 只是被视为数字,所以最终我会在运行时遇到一些错误。

但是 PropTypes 在运行时工作,所以在同样的情况下,我会收到错误消息 PropType 预期的数字,但实际上它是字符串。

当 API 更改并且返回的数据不同时,也可能发生这种情况。它可能是未定义的或其他任何东西,可能不是我预期的实际值。

所以我实际上同时使用了 Flow 和 PropTypes,但是我搜索了两者一起使用,但找不到任何相关信息。

相反,我发现的只是“Flow”替换了“PropTypes”。我不这么认为,我已经提到了这两者之间的区别。这两个作品完全不同,每个都有很多好处,所以我认为将它们结合起来会有很好的协同作用。

但是现在我同时使用这两种方法,我必须为 props 定义类型,还必须始终定义 propTypes 和 defaultProps,这使我的代码实际上很长,并且只制作单个组件就需要很多时间。

我应该停止同时使用 Flow 和 PropTypes 吗?我认为 Flow 比 PropTypes 更好,使用静态类型检查器有很多好处,所以我想继续使用它。还有对 Flow 的很好的 VSCode 支持,但不是 proptypes。

如果我使用 Flow,是否不需要 PropTypes?任何建议都会很感激。

【问题讨论】:

  • 如果您使用 flow-runtime,flow 可以在运行时工作。但是,它可能会显着降低您的应用程序的速度,因为检查将无处不在,而不仅仅是在组件属性中。
  • 如您所说,propTypes 在运行时工作,因此它提供了更准确的类型检查。如果您想要另一种选择,您可以查看 Typescript 3.0,其中 type 将转换为 propTypes 以用于反应组件。 [文档][1] [1]:typescriptlang.org/docs/handbook/release-notes/…
  • @DanielTran 哇,太棒了!

标签: reactjs flowtype react-proptypes


【解决方案1】:

Flow 允许您为任何事物提供类型。

PropTypes 仅用于组件的道具,因此它无法帮助键入变量或方法。它甚至没有简单的方法来输入回调道具。您需要描述custom validator

PropTypes 也适用于每个道具。你不能描述独立的道具子集。例如。 “仅当昵称为空时,才需要具有字段 NAME”。我同意这听起来对这个例子没有帮助。但这仍然意味着流程更加灵活。

顺便说一句,在生产中进行类型检查是个坏主意——它会导致性能下降。同时,大多数类型问题已经被捕获。虽然它仍然不能让您摆脱逻辑问题 - 所以您需要通过手动/验收/集成测试来测试它。

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多