繁体   English   中英

React.js-TypeError:无法读取未定义的属性“ catch”

[英]React.js - TypeError: Cannot read property 'catch' of undefined

组件LoginForm具有以下代码:

class LoginForm extends React.Component {
  .................................................................
    onSubmit = (e) => {
      e.preventDefault();
      const errors = this.validate(this.state.data);
      this.setState({ loading: true});
      this.props.submit(this.state.data).catch(console.log("errors"));

    }

    .....................................................................   
}

LoginForm.PropTypes = {
  submit: PropTypes.func.isRequired
};

export default LoginForm;

当我提交按钮时,出现错误TypeError:无法读取未定义的属性“ catch”

组件登录页面

class LoginPage extends React.Component {
  submit = data => {
    this.props.login(data).then(() => this.props.history.push("/"));
  }

  render() {
    return(
      <div className="login-page">
        <main>
          <div className="login-block">
            <img src="assets/img/logo.png" alt=""/>
            <h1>Log into your account</h1>
            <LoginForm submit={this.submit} />
          </div>
          <div className="login-links">
            <a className="pull-left" href="user-forget-pass.html">Forget Password?</a>
            <a className="pull-right" href="user-register.html">Register an account</a>
          </div>
        </main>
      </div>
    );
  }
}

LoginPage.propTypes = {
  history: PropTypes.shape({
    push: PropTypes.func.isRequired
  }).isRequired,
  login: PropTypes.func.isRequired
};

export default connect(null, {login})(LoginPage);

动作/授权

import { USER_LOGGED_IN } from "../types";
import api from "../api";

export const userLoggedIn = user => ({
  type: USER_LOGGED_IN,
  user    
});

export const login = credentials => dispatch =>
  api.user.login(credentials)
    .then(user => dispatch(userLoggedIn(user)));

您能否解释为什么未定义的捕获量? 函数使用promise then()提交返回结果。

您应该将catch移至LoginPage

submit = data => {
  this.props.login(data)
    .then(() => this.props.history.push("/"))
    .catch(console.log)
}

并在需要时将错误作为LoginForm传递给LoginForm

删除承诺中的{}。 应该是这样

submit = data => this.props.login(data).then(() => this.props.history.push("/"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM