【发布时间】:2016-07-04 01:47:31
【问题描述】:
PropTypes 和 Flow 涵盖了类似的内容,但使用了不同的方法。 PropTypes 可以在运行时向您发出警告,这有助于快速找到来自服务器等的格式错误的响应。但是,Flow 似乎是未来,并且使用泛型等概念是一个非常灵活的解决方案。此外,Nuclide 提供的自动补全功能也是 Flow 的一大优势。
我现在的问题是,在开始一个新项目时,哪种方式最好。还是同时使用 Flow 和 PropTypes 是一个很好的解决方案?使用两者的问题是您编写了很多重复的代码。这是我写的一个音乐播放器应用的例子:
export const PlaylistPropType = PropTypes.shape({
next: ItemPropTypes,
current: ItemPropTypes,
history: PropTypes.arrayOf(ItemPropTypes).isRequired
});
export type Playlist = {
next: Item,
current: Item,
history: Array<Item>
};
两个定义基本上包含相同的信息,当数据类型发生变化时,两个定义都需要更新。
我发现这个babel plugin 可以将类型声明转换为 PropTypes,这可能是一个解决方案。
【问题讨论】:
-
如果你想开始使用 Flow,试试这个帖子:robinwieruch.de/the-soundcloud-client-in-react-redux-flow
-
从经验来看,使用问题中提到的插件并不是一个很好的主意。它不支持所有类型的组件,从 v0.39 开始完全被 React Native 破坏,并且通常非常脆弱。回购的所有者过去对这些问题的反应相当迅速,但似乎他失去了兴趣,再也不能依靠他来维持它。
-
尝试使用 Flow 和 tcomb 进行静态和运行时类型检查的 tcomb via Babel 插件。
标签: reactjs flowtype react-proptypes