将mapDispatchToProps定义为对象

时间:2018-11-22 21:48:18

标签: reactjs redux react-redux

我只是想知道Defining mapDispatchToProps As An Object如何将ownProps传递给它?就像在函数中一样,我可以将prop作为参数传递。

const mapDispatchToProps = (dispatch, ownProps) => {
  toggleTodo: () => dispatch(toggleTodo(ownProps.todoId));
};

对于对象如何传递ownProps?

const mapDispatchToProps = {
  toggleTodo
};

我的帐户受到一些否决问题的阻止,有趣的是,即使我已经接受了答案,我也必须重新编辑它们。我不明白这样做的意义。这个stackoverflow系统。

现在,除了继续编辑我的问题外,我基本上无能为力,并且所有问题都已得到解答。这太荒谬了!!!

2 个答案:

答案 0 :(得分:1)

简短的回答:您不需要。您将道具传递到每个被调用和需要的动作中。

长答案: mapDispatchToProps将您的操作连接到组件中以便进行分派,因此您可以使用this.props.action调用该操作并为其传递所需的道具,而不用笨拙地找到并使用this.props.dispatch(action())或类似的东西。

我发现将操作连接到导出并在需要时调用操作this.props.addUser(prop1,prop2)-onClick()componentDidMount()等会更简单。默认情况下,它无需执行任何操作即可分配调度mapDispatchToProps。所以

export default connect(
    mapStateToProps, 
    {action1, action2, addUser})(User)

然后您可以使用:

addNewUser = () => {
  this.props.addUser(this.state.person);
}

传递所要道具的位置,然后执行动作或减速器本身的其他工作(取决于您对流量的偏好),例如:

export const addUser = user => ({
    type: ADD_USER_SUCCESS,
    payload: {user}
})

答案 1 :(得分:0)

ownProps不能传递给它,而无需在mergeProps函数中传递的connect函数中进行接线。

您看到,当mapDispatchToProps是对象时,将调用whenMapDispatchToPropsIsObject。依次调用wrapMapToPropsConstant,该操作

constantSelector.dependsOnOwnProps = false

现在,此属性用于确定是否应使用prop调用动作分派器。在handleNewPropsAndNewState中查看所有handle*函数,例如src/connect/selectorFactory.js

这与mapDispatchToProps是一个函数时发生的情况形成对比。在这种情况下,wrapMapToPropsFunc在调用时会包装动作分派器,然后使用道具来调用它。

在不传递mergeProps的情况下,您需要将id道具转发给与mapDispatchToProp连接的Component中的动作创建者

例如

onClickToggleButton = () => {
  const {id, toggleTodo} = this.props
  toggleTodo(id)
}