0

Loginhandler 是单击登录按钮后调用的函数。以下是两个文件的片段。LoginScreen 是我的 login.js 文件,其中 Action 是我的操作文件。我也制作了减速器文件,但我的重点是从输入字段中获取用户名和密码,使用 loginhandler 函数将其发送到操作文件,成功时打开我的主屏幕,然后在错误时弹出警报。

----------------Login Screen------------
    useEffect(() => {
        if (error) {
          Alert.alert("An Error Occurred!", error, [{ text: "Okay" }]);
        }
      }, [error]);
    
      const loginHandler = async () => {
        let action = authActions.login(
          formState.inputValues.username,
          formState.inputValues.password
        );
        setError(null);
        setIsLoading(true);
        try {
          await dispatch(action);
          props.navigation.navigate("PostAuth");
        } catch (err) {
          setError(err);
          setIsLoading(false);
        }
      };
    
    -----------------ACTION FILE-------------------
    const axios = require("axios");
    export const LOGIN = "LOGIN";
    export const login = (username, password) => {
      const params = new URLSearchParams();
      params.append("username", username);
      params.append("password", password);
      return async (dispatch) => {enter code here
        axios
          .post("xyz.com/testApp/api/login.php", params)
          .then((response) => {
            const res = response.data.response;
            const resMsg = res.message;
    
            let preDefinedErrMsg;
    
            if (resMsg !== "success") {
              preDefinedErrMsg = "Wrong Credentials";
              throw new Error(preDefinedErrMsg);
            }
    
            dispatch({
              type: LOGIN,
              token: "resData.idToken",
              userId: "resData.id",
              errorMessage: "message",
            });
    
            console.log(response);
          })
          .catch((err) => {
            //console.log(err);
          });
      };
    };
4

1 回答 1

0
Yes I got it solved, by handling error in my action file.

const axios = require("axios");
export const LOGIN = "LOGIN";
export const login = (username, password) => {
  const params = new URLSearchParams();
  params.append("username", username);
  params.append("password", password);
  return async (dispatch) => {
    await axios
      .post("xyz.com/api/login.php", params)
      .then((response) => {
        const res = response.data.response;
        const resMsg = res.message;
        let preDefinedMsg;

        if (resMsg === "Error") {
          preDefinedErrMsg = "Wrong Credentials";
          throw new Error(preDefinedErrMsg);
        } else if (resMsg === "success") {
          preDefinedMsg = "success";
          dispatch({
            type: LOGIN,
            token: "resData.idToken",
            userId: "resData.id",
            errorMessage: "message",
          });
        }
      })
      .catch((error) => {
        if (error.message === preDefinedErrMsg) {
          throw new Error(preDefinedErrMsg);
        }
      });
  };
};
于 2021-07-14T15:45:45.367 回答