this.props.dispatch()。然后不是一个函数

时间:2017-10-01 01:56:36

标签: javascript reactjs redux

我在dispatch操作完成后尝试执行某项操作,类似的问题导致我尝试使用.then。我收到一个它不存在的错误this.props.dispatch().then is not a function

export function unpackStore(redux_store, namespace) {
    // namespace is determined by what name you gave each reducer in combineReducers; client/reducers/index.js
    let final_props = {};
    let KEYS = Object.keys(redux_store[namespace]);
    for (let key of KEYS) {
        final_props[key] = redux_store[namespace][key];
    }
    return final_props;
}

export function basicUnpackStoreClosure(namespace) {
    return function(store) {
        let props = unpackStore(store, namespace);
        return props;
    }
}



@connect(basicUnpackStoreClosure('login_info'))
export default class LoginPage extends MyComponent {

    constructor(props) {
        let custom_methods = [
            'handleLoginOrRegisterToggle',
            'handleOnKeyDownInInputs',
            'onLoginSubmit',
            'onRegisterSubmit',
        ]
        super(props, custom_methods);
        this.state = {
            mode: 'login',
            email: '',
            password: '',
            password_confirm: ''
        };
        if (props.mode == 'register') {
            this.state.mode = 'register';
        }

    }

    onLoginSubmit() {

        let self = this;

        let reroute = function() {
            browserHistory.push(self.props.destination_url);
        }

        this.props.dispatch({type: 'LOG_IN', payload: "fake@fake.com"})
          .then((response) => {
              browserHistory.push(self.props.destination_url);
          })
    }

this.setState完成时,我们也尝试过你做某事的方式,并将其作为第二个arg传递:

this.props.dispatch({type: 'LOG_IN', payload: "fake@fake.com"}, reroute)

既没有奏效。使用this.props.dispatch装饰器时@connect似乎是免费的。如何在使用" LOG_IN"更新此Redux存储之后运行某些内容。动作?

2 个答案:

答案 0 :(得分:1)

通常,连接HOC用于将动作与组件绑定。例如,

export default connect(mapStateToProps, mapDispatchToProps)(ApplicationContainer);

执行此操作后,then this.props.getApplications将绑定在getApplications是您需要触发的操作的位置。

根据您的评论,如果您想要访问this.props.dispatch INSTEAD绑定操作,只需调用connect()而不传递任何映射器,默认行为将注入调度。

答案 1 :(得分:0)

您可以安装“ redux-promise”中间件并将其包含在您的商店中。这里的问题是诺言没有兑现。包括“ redux-promise”中间件将解决该问题