Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Action must be a plain objetcts #94

Open
CalebeRios opened this issue Nov 7, 2017 · 2 comments
Open

Action must be a plain objetcts #94

CalebeRios opened this issue Nov 7, 2017 · 2 comments

Comments

@CalebeRios
Copy link
Collaborator

Eae galera, me deparei com um erro que já tinha visto, mas estava fazendo errado e não entendi o motivo dele. Agora eu tenho certeza que minha action esta certo, mas não consigo entender ainda com esse erro: Actions must be plain objects. Use custom middleware for async actions. Eu pesquisei, achei algumas soluções, mas não entendi o principal motivo do erro.

Aqui esta a Action:

import axios from 'axios';

export const FETCH_ACTUAL_USER = 'FETCH_ACTUAL_USER';

export const fetchActualUser = (email, password) => {
  const data = { params: { userEmail: email, userPassword: password } };
  const HOST = 'http://localhost:8000/login/';

  axios.get(HOST, data)
  .then((response) => {
    const request = {
      type: FETCH_ACTUAL_USER,
      payload: response.data,
    };
    return request;
  });
};

Estou disparando a action com o mapDispatchToProps, assim:

import { fetchActualUser } from '../actions/fetchActualUser';

const mapDispatchToProps = (dispatch) => {
  return {
    sendLoginData(email, password) {
      dispatch(fetchActualUser(email, password));
    },
  };
};

E estou disparando a função assim:

() => this.props.sendLoginData(this.state.email, this.state.password)
@CalebeRios
Copy link
Collaborator Author

@tulioc
Copy link
Collaborator

tulioc commented Nov 7, 2017

@CalebeRios Algumas perguntas:

  • Já que está tentando enviar os dados do componente para a API, porque está utilizando o método get no axios? A rota na API não é um POST?

  • A action precisa ser um objeto simples, não pode ser o retorno de uma função assíncrona. Existem diversas maneiras de lidar com esse tipo de situação. A primeira seria deixar a action apenas responsável por enviar um .put e no componente você verificar se o request foi realizado com sucesso ou não.

  • Em todos os métodos .get utilizados até agora na aplicação, não há uma verificação de retorno. Você simplesmente faz o request, e passa esse request como retorno da action, e a redux-promise (que é nosso middleware) lida com o que a API irá retornar para você, então basta enviar um put para o servidor, atribuir isso ao request e retornar esse request, como estamos fazendo em todas as outras actions. O que a API retornar pra você, a própria biblioteca redux-promise ficará responsável de administrar pra você.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants