Flow 会取代 PropTypes 吗?
Is Flow replace PropTypes?
我正在使用 React with Flow。如果我在渲染时忘记设置一些需要的道具,Flow 会给我错误,所以我可以防止这个问题。
但是 Flow 实际上并没有在运行时运行。因此,如果我使用的值被视为数字而不是数字,Flow 无法捕捉到这一点。例如,如果该值来自其他地方,比如服务器端,如果它是字符串,但 Flow 只是将其视为数字,所以最终我会在运行时遇到一些错误。
但是 PropTypes 在运行时工作,所以在同样的情况下,我会收到 PropType 期望数字但实际上是字符串的错误消息。
当 API 被更改并且返回的数据不同时,也可能会发生这种情况。它可能是未定义的或其他什么,可能不是我期望的实际值。
所以我实际上同时使用了 Flow 和 PropTypes,但是我搜索了两者一起使用,但找不到任何相关信息。
相反,我发现只是 "Flow" 替换了 "PropTypes"。我不这么认为,我已经提到了这两者之间的区别。这两者的作用完全不同,而且它们各自都有很多好处,所以我认为将它们结合起来会有很好的协同作用。
但是现在我同时使用两者,我必须定义 props 的类型并始终定义 propTypes 和 defaultProps,这使我的代码实际上很长并且只需要花费大量时间来制作单个组件。
我应该停止同时使用 Flow 和 PropTypes 吗?我认为 Flow 比 PropTypes 更好,使用静态类型检查器有很多好处,所以我想继续使用它。还有很好的 VSCode 支持 Flow,但不支持 proptypes。
如果我使用Flow,是不是不需要PropTypes?任何建议将不胜感激。
Flow 允许您为任何事物提供类型。
PropTypes 仅用于组件的道具,因此它无法帮助输入变量或方法。它甚至没有简单的方法来输入回调道具。您需要描述 .
PropTypes 也适用于每个道具。你不能描述道具的独立子集。例如。 "having field NAME is required only if nickname is empty"。我同意这听起来对这个例子没有多大帮助。但这仍然意味着流程更加灵活。
顺便说一句,在生产环境中进行类型检查无论如何都是个坏主意——这会导致性能下降。同时,大多数类型问题都已经被捕获。虽然它仍然不能使您免于逻辑问题 - 因此您需要使用 manual/acceptance/integration 测试来测试它。
我正在使用 React with Flow。如果我在渲染时忘记设置一些需要的道具,Flow 会给我错误,所以我可以防止这个问题。
但是 Flow 实际上并没有在运行时运行。因此,如果我使用的值被视为数字而不是数字,Flow 无法捕捉到这一点。例如,如果该值来自其他地方,比如服务器端,如果它是字符串,但 Flow 只是将其视为数字,所以最终我会在运行时遇到一些错误。
但是 PropTypes 在运行时工作,所以在同样的情况下,我会收到 PropType 期望数字但实际上是字符串的错误消息。
当 API 被更改并且返回的数据不同时,也可能会发生这种情况。它可能是未定义的或其他什么,可能不是我期望的实际值。
所以我实际上同时使用了 Flow 和 PropTypes,但是我搜索了两者一起使用,但找不到任何相关信息。
相反,我发现只是 "Flow" 替换了 "PropTypes"。我不这么认为,我已经提到了这两者之间的区别。这两者的作用完全不同,而且它们各自都有很多好处,所以我认为将它们结合起来会有很好的协同作用。
但是现在我同时使用两者,我必须定义 props 的类型并始终定义 propTypes 和 defaultProps,这使我的代码实际上很长并且只需要花费大量时间来制作单个组件。
我应该停止同时使用 Flow 和 PropTypes 吗?我认为 Flow 比 PropTypes 更好,使用静态类型检查器有很多好处,所以我想继续使用它。还有很好的 VSCode 支持 Flow,但不支持 proptypes。
如果我使用Flow,是不是不需要PropTypes?任何建议将不胜感激。
Flow 允许您为任何事物提供类型。
PropTypes 仅用于组件的道具,因此它无法帮助输入变量或方法。它甚至没有简单的方法来输入回调道具。您需要描述
PropTypes 也适用于每个道具。你不能描述道具的独立子集。例如。 "having field NAME is required only if nickname is empty"。我同意这听起来对这个例子没有多大帮助。但这仍然意味着流程更加灵活。
顺便说一句,在生产环境中进行类型检查无论如何都是个坏主意——这会导致性能下降。同时,大多数类型问题都已经被捕获。虽然它仍然不能使您免于逻辑问题 - 因此您需要使用 manual/acceptance/integration 测试来测试它。