从mapDispatchToProps调度操作是一个坏主意,为什么?

时间:2017-12-12 00:09:19

标签: redux react-router-redux

我们正在使用react-router-redux在我们的应用程序中进行路由。

<Route path='/users/:userId' component={SomeComponent} />

通过这种方式,SomeComponent会在其匹配参数中收到userId。问题是,为了让SomeComponent的孩子接收id,我们必须将它作为道具从父母传给孩子。我们尽可能地避免将道具从父级传递给子级,更喜欢使用容器和redux存储。

为了给孩子们提供参数,我们正在考虑让SomeComponent在道具改变时派遣一个动作。一个方便的方法是:

const mapDispatchToProps = (dispatch: Dispatch<IState>, props: IPropsFromParent): IPropsFromDispatch => {

  dispatch(ActionCreators.updateShowingUserId({
    userId: props.match.params.userId,
  }))

  return {
    anotherAction: () => {
      dispatch(ActionCreators.doOtherStuff())
    }
  }
}

这样,只要组件从路由器收到新的userId,它就会更新商店中的值。在树中呈现更深但但本身不连接到路由器的组件可以使用此值进行条件渲染等...

然而,我们担心由于我们尚未意识到的原因,这可能是不好的做法。众所周知,禁止在反应组件的渲染函数中调用setState。我想知道在mapDispatchToProps中调用调度是否存在类似的具体限制。

在mapDispatchToProps中调度操作是不是一个坏主意,如果是,为什么?

1 个答案:

答案 0 :(得分:1)

由于每次更新redux store时都会运行调度,因此在mapStateToProps,{mapDispatchToProps内调度内容不是一个好主意。 1}}或mergeProps函数,因为您将使用默认值覆盖前一个值。您应该尽可能地将您要分配的值添加到初始存储中,或者从控制该组件的父级调度默认值。

ReactRedux.connect

的文档