mapDispatchToProps 应该调度初始化操作吗?

Should mapDispatchToProps dispatch initialization actions?

假设一个无状态的功能性 UserProfile 组件显示给定 url 的用户数据。假设它被包裹在 connect(mapStateToProps, mapDispatchToProps)(UserProfile) 中。最后,假设一个缩减为 state.userProfile 的减速器。每当 url 发生变化时,我都需要重新初始化 state.userProfile,所以想到的解决方案是从 mapDispatchToProps 中这样做:

function mapDispatchToProps(dispatch, ownProps) {
  dispatch(fetchUser(ownProps.userId))
  return {
    ...
  }
}

假设 thunked fetchUser 通过与当前状态进行比较而忽略重复调用,这是可以接受的做法吗?或者是否存在与从该映射函数立即调用调度相关的问题?

这是不受支持的,随时可能中断。
mapDispatchToProps本身应该没有副作用。

如果您需要调度操作以响应 prop 更改,您可以创建一个组件 class 并为此使用生命周期方法:

class UserProfile extends Component {
  componentDidMount() {
    this.props.fetchUser(this.props.id)
  }

  componentDidUpdate(prevProps) {
    if (prevProps.id !== this.props.id) {
      this.props.fetchUser(this.props.id)
    }
  }

  // ...

}