0

I have a problem calling a function in React.

I have a login which takes as inputs an email and password and when I press the button I have defined that the function handleLogin is called. The code of this function is as follows:

const handleLogin = () => {
event.preventDefault();
getToken({ variables: { email: mailInputData, password: passwordInputData } });

if (dataResponse.data) {
  if (
    dataResponse.data.authLogin !== "User not found" &&
    dataResponse.data.authLogin !== "Wrong password"
  ) {
    localStorage.setItem('token', dataResponse.data.authLogin);
    window.location.href = "/dashboard";
  } else {
    Swal.fire({
      icon: "error",
      title: "Oops...",
      text: "Usuario o contraseña incorrectos",
    });
  }
}

};

The query to obtain the token is done through GraphQL using useLazyQuery.

const DATA_QUERY_LOGIN = gql`query ($email: String!, $password: String!) {
authLogin(email: $email, password: $password)}`;

const [getToken, dataResponse] = useLazyQuery(DATA_QUERY_LOGIN);

When the button is pressed, the handleLogin function is called in the following way:

<MDButton variant="gradient" color="dark" fullWidth onClick={handleLogin}>
            Login
          </MDButton>

If I type an incorrect username or password and press the button, I receive the corresponding "incorrect username or password" alert, but if I then type the correct username and password and press the button I still receive the "incorrect username or password" alert. I have to press the button again (without making a change in the inputs) to get the token back.

And always the same thing happens, if I press the button, change the value of the inputs to a correct user, and then press it again, I get exactly the same response as the previous GraphQL query, but if I press it again this time it returns the token.

Could someone please help me?

Thanks :)

José
  • 1
  • 1
  • 1. You have a function called `getToken` but it returns nothing so I guess it changes state. 2. State changes aren't immediate – Konrad Oct 18 '22 at 21:37
  • Does this answer your question? [The useState set method is not reflecting a change immediately](https://stackoverflow.com/questions/54069253/the-usestate-set-method-is-not-reflecting-a-change-immediately) – Konrad Oct 18 '22 at 21:38

0 Answers0