我只是想知道Defining mapDispatchToProps As An Object
如何将ownProps传递给它?就像在函数中一样,我可以将prop作为参数传递。
const mapDispatchToProps = (dispatch, ownProps) => {
toggleTodo: () => dispatch(toggleTodo(ownProps.todoId));
};
对于对象如何传递ownProps?
const mapDispatchToProps = {
toggleTodo
};
我的帐户受到一些否决问题的阻止,有趣的是,即使我已经接受了答案,我也必须重新编辑它们。我不明白这样做的意义。这个stackoverflow系统。
现在,除了继续编辑我的问题外,我基本上无能为力,并且所有问题都已得到解答。这太荒谬了!!!
答案 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)
}