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

时间:2016-04-15 18:14:57

标签: javascript redux react-redux

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

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

如果thunked fetchUser通过与当前状态进行比较而忽略重复调用,这是否可以接受?或者是否存在与此地图功能立即调用调度相关的问题?

1 个答案:

答案 0 :(得分:5)

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

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

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)
    }
  }

  // ...

}