【发布时间】:2020-01-01 20:04:00
【问题描述】:
我在开发我的 react-native 应用程序时使用 Flow 来提供一些类型安全,并且我使用 redux。
这是我连接到 redux 商店的典型智能组件的示例:
import React, { Component } from 'react'
type Props = {
user: User,
updateUser: User => void,
}
type State = {}
default class SmartComponent extends Component<Props, State> {
// My component methods
}
const mapStateToProps = (state, ownProps) => {
return {
...ownProps,
user: state.user
}
}
const mapDispatchToProps = dispatch => {
return {
updateUser: (user: User) =>
dispatch(updateUser(user)),
}
}
export default connect(
mapStateToProps,
mapDispatchToProps,
)(SmartComponent)
这可行,但流程不会强制我在 Props 中拥有的内容与我在 mapDispatchToProps 或 mapStateToProps 中返回的内容之间的兼容性:如果我在 mapDispatchToProps 中修改函数但我忘记手动更新我的Props,Flow 没有错误,但我可能会在运行时出错。
是否有办法或最佳实践让 flow 自动从 mapDispatchToProps 和 mapStateToProps 理解 this.props 的内容,或者至少在它们不同时引发错误?
【问题讨论】:
-
您是否尝试过使用github.com/flow-typed/flow-typed/blob/master/definitions/npm/… 的类型定义?还有针对不同版本的 Flow 和 react-redux 的文件。 github.com/flow-typed/flow-typed/blob/master/definitions/npm/… 提供了如何使用这些类型的示例。