将操作连接到组件时出错

时间:2017-01-18 17:24:30

标签: javascript reactjs redux

我正在尝试使用matchDispatchtoProps连接组件。

function matchDispatchToProps(dispatch) {
    return bindActionCreators({setAuthToken: actions.setAuthToken}, dispatch);
}


export default connect(matchDispatchToProps)(LogInComponent);

然后我从ajax请求中调用setAuthToken,就像这样

handleLoginButtonClick() {
        var settings = {
            "async": true,
            "crossDomain": true,
            "url": "https://trigger-backend.appspot.com/auth/login/",
            "method": "POST",
            "credentials": 'include',
            "headers": {
                "content-type": "application/x-www-form-urlencoded",
            },
            "data": {
                "password": "apurv",
                "username": "Apurv"
            },
            success: function( data, textStatus, jQxhr ){
                alert("success");
            },
        }

        $.ajax(settings).done((response) => {
            alert(response.auth_token);
            this.props.setAuthToken(response.auth_token);
            console.log('check');
            this.context.router.push('/app')
        });

这是我调用handleButtonClick

的渲染组件
 render(){
        return (
            <div className="LoginPage">
                <div className="login-page">
                    <div className="form">
                        <form className="login-form">
                            <input id="username" type="username" placeholder="username"/>
                            <input id="password" type="password" placeholder="password"/>
                            <p className="message">Not registered? <a href="#">Request Username and Password</a></p>
                        </form>
                        <button onClick={this.handleLoginButtonClick.bind(this)}>login</button>
                    </div>
                </div>
            </div>
        );
    }

但我收到的错误是“发送不是功能”。我做错了什么?

1 个答案:

答案 0 :(得分:0)

当你需要成为第二个参数时,你作为第一个连接参数传递mapDispatch。您需要改为使用connect(null, mapDispatch)(LogInComponent)

另请注意,connect()支持mapDispatch的简写语法。您可以使用您想要绑定的动作创建者传入一个对象,而不是传递实际函数,例如:

const {setAuthToken} = actions;
export default connect(null, {setAuthToken})(LogInComponent);