Redux 从mapDispatchToProps发送操作是个坏主意吗?为什么?

Redux 从mapDispatchToProps发送操作是个坏主意吗?为什么?,redux,react-router-redux,Redux,React Router Redux,我们正在应用程序中使用react router redux进行路由 <Route path='/users/:userId' component={SomeComponent} /> 这样,只要组件从路由器接收到新的用户ID,它就会更新存储中的值。在树中渲染更深但自身未连接到路由器的组件可以将此值用于条件渲染等 然而,我们担心,由于我们尚未意识到的原因,这可能是一种不好的做法。众所周知,禁止在react组件的渲染函数中调用setState。我想知道在mapDispatchToPro

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

<Route path='/users/:userId' component={SomeComponent} />
这样,只要组件从路由器接收到新的
用户ID
,它就会更新存储中的值。在树中渲染更深但自身未连接到路由器的组件可以将此值用于条件渲染等

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


在mapDispatchToProps中分派操作是一个坏主意吗?如果是,原因是什么?

由于分派将在每次更新redux
存储时运行,因此在
MapStateTrops中分派操作(以及组件更改的道具)不是一个好主意,
mapDispatchToProps
mergeProps
函数,因为您将用默认值覆盖以前的值。如果可能,您应该将要分派的值添加到初始存储中,或者从控制组件的父级分派默认值


的文档在上面的示例代码中,您可能会惊讶地发现
MapStateTrops
运行两次,而
mapDispatchToProps
只运行一次。我怀疑只有当道具更改时才会重新运行
mapDispatchToProps
,而不是state.Correct。如果使用一个参数(
dispatch
)定义了
mapDispatch
),则在实例化组件时,它将运行一次。如果它是用两个参数(
(dispatch,ownProps)
)定义的,那么它将在实例化时运行,也会在包装器组件的props更新时运行。@markerikson是的!那么,在
mapDispatch
中调度操作是否有问题?类似于“它可能导致无限循环”或“您不应该在状态更新时中断渲染周期”?我已经用我们的具体用例更新了我的问题,以防有帮助。谢谢很抱歉,我将否决你的答案:你的答案是“这不是个好主意,……因为你会用默认值覆盖以前的值”。这不是真的,所以不可能是答案。谢谢你的努力!PS我怀疑你是对的,这是一个坏主意(这就是为什么我一开始问的原因),但我需要知道为什么这是一个坏主意,以便决定是否这样做。
const mapDispatchToProps = (dispatch: Dispatch<IState>, props: IPropsFromParent): IPropsFromDispatch => {

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

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