在react-redux中使用bindactioncreator进行调度操作

时间:2016-11-15 12:54:21

标签: reactjs redux

function mapDispatchToProps(dispatch) {
    return {
        actions: bindActionCreators(Object.assign({},LoginActions), dispatch)
    };
}

在组件中,我有这个功能:

  constructor(props) {
        super(props);
        this.onLogin = this.onLogin.bind(this);
    }

onLogin(loginType){
    LoginActions.loginAction(this.state.user.username, this.state.user.password, loginType, [] , "")
  }

我相信LoginActions.loginAction应该可以发送动作,但看起来不行。 它永远不会返回使用redux thunk>

从动作创建者返回的函数

例如:

export function loginAction(email, password, loginType, products, productIds){    //thunk always returns a function that accepts a dispatch
  console.log("IN LOGIN ACTION")
  console.log("email", email);
  console.log("password", password);
  console.log("login type", loginType)
  console.log("products", products)
  console.log("productids", productIds) //comma separated list of product Id's
  return function (dispatch) {
    console.log("dispatch)
    return LoginAPI.directLogin(cookie.load('sessionID'), email, password, loginType, products, '')
         .then(userinfo => {
            dispatch(login(userinfo))
          }).catch(err=> {
          console.log("error occured", err)
          throw(err);
        });

在上面的函数中,所有的控制台语句都被打印出来但它从不打印" dispatch"。我想我并没有把它称为正确的方式。我得到了帮助

2 个答案:

答案 0 :(得分:1)

绑定动作时,它会返回您要映射到actions的对象。这意味着您可以致电this.props.actions.loginAction(...)并将其发送。

它不会以任何方式改变函数本身,所以如果你调用函数它只会执行函数所做的任何事情,但不会在任何地方发送它。

答案 1 :(得分:1)

如果您使用mapDispatchToProps进行连接,您将使用以下方式调度操作:

BaseVisitor