_Это не ошибка функции при отправке действия - PullRequest
0 голосов
/ 04 июля 2018

Фон

Я работаю над очень рутинным фрагментом кода, я много раз создавал действия и редукторы в своем приложении. Сейчас я настраиваю аутентификацию, и у меня загружаются два контейнера на основе маршрутов / & /register.

Выпуск

Я пытаюсь отправить действие и выполнить простое console.log("test"). Я делал это много раз, прежде чем, фактически, я буквально продублировал контейнер и изменил имена отправленных имен действий. Один контейнер работает, а другой бьет меня:

Uncaught TypeError: _this2.propsregisterHandler is not a function

Я запутался, почему не отображается . между реквизитом и registerHandler

Вот соответствующий код:

Контейнер Импорт

import { register } from "../../store/actions/authentication";

JSX

 <div
  className="btn btn-primary col"
  onClick={() =>
    this.props.registerHandler(
      this.state.email,
      this.state.password
    )
  }
>
  Register
</div>

....

Код отправки

const mapStateToProps = state => {
  return {};
};

const mapDisptachToProps = dispatch => {
  return {
    registerHandler: () => dispatch(register())
  };
};

export default connect(
  mapStateToProps,
  mapDisptachToProps
)(Register);

Акция

import * as actionTypes from "./actiontypes";

export const register = () => {
  console.log("TEST");
  return { type: actionTypes.REGISTER };
};

1032 * Переходник * const reducer = (state = initialState, action) => { switch (action.type) { case actiontypes.REGISTER: { console.log("you called the reducer"); return state; } Пересмотренный Этот код здесь не работает, я всегда получаю сообщение об ошибке, однако, если я вызываю одно и то же действие в моем компоненте входа, оно будет работать. import React, { Component } from "react"; import { connect } from "react-redux"; import { registerUserToApp } from "../../store/actions/authentication"; import "../Login/login"; export class Register extends Component { state = { email: "", password: "" }; render() { return ( <div className="btn btn-primary" onClick={() => { this.props.registerUserToAppHandler(); }} > Register </div> ); } } const mapStateToProps = state => { return {}; }; const mapDispatchToProps = dispatch => { return { registerUserToAppHandler: () => dispatch(registerUserToApp()) }; }; export default connect( mapDispatchToProps, mapStateToProps )(Register); Компонент входа

import React, { Component } from "react";
import { connect } from "react-redux";
import Aux from "../../components/hoc/Aux";
import Logo from "../../assets/images/Logo.png";
import GoogleLogo from "../../assets/images/google.svg";
import {
  loginUser,
  loginUserWithGoogle,
  registerUserToApp
} from "../../store/actions/authentication";

import "./login.css";

export class Login extends Component {
  state = {
    email: "",
    password: ""
  };

  render() {
    const userNameChangeHandler = event => {
      this.setState({
        email: event.target.value
      });
    };

    const passworChangeHandler = event => {
      this.setState({
        password: event.target.value
      });
    };

    return (
      <Aux>
       ...
                    <div
                      className="btn btn-primary col"
                      onClick={() => {
                        this.props.loginUserHandler(
                          this.state.email,
                          this.state.password
                        );
                        this.props.registerUserToAppHandler();
                      }}
                    >
                      Sign In
                    </div>
                    ...
      </Aux>
    );
  }
}

const mapStateToProps = state => {
  return {};
};

const mapDisptachToProps = dispatch => {
  return {
    loginUserHandler: (email, password) => dispatch(loginUser(email, password)),
    registerUserToAppHandler: () => dispatch(registerUserToApp()),
    loginUserWithGoogleHandler: () => dispatch(loginUserWithGoogle())
  };
};

export default connect(
  mapStateToProps,
  mapDisptachToProps
)(Login);

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Проблема была связана с тем, как я загружал этот компонент в свой контейнер. Я точно уверен в точных рассуждениях, но я импортировал свой компонент в контейнер, используя именованный импорт import {Login} from ".../path", тогда как он должен был быть import Login from ".../path".

0 голосов
/ 04 июля 2018

Я не могу оставить комментарий, но разве вы не должны добавлять расширение .css при импорте стилей?

import "../Login/login";
...