类方法/异步问题?

issue with class methods / async?

提问人:Aslan 提问时间:11/13/2023 最后编辑:Aslan 更新时间:11/13/2023 访问量:47

问:

在我的 React 项目中使用 Zustand,我正在定义全局身份验证状态,如您在代码片段中看到的那样。我还定义了一个 Auth API 来运行 auth 方法。但是,出于某种奇怪的原因,即使响应状态为 200 并且当我进入检查时,该行后面的 if-block 行也不会运行,这意味着:不运行。 也不运行。 如果我把它们放在 之前,它们都会运行。if (response.status === 200)this.setLoginsuccess=trueconsole.log("authenticated")this.setLogin

Zustand商店:

import { create } from "zustand";

type AuthStore = {
  id: number | null;
  isLoggedIn: boolean;
  accessToken: string;
  setLogin: (token: string, id: number) => void;
  setLogout: () => void;
  test: () => void;
};

export const useAuthStore = create<AuthStore>((set) => ({
  id: null,
  isLoggedIn: false,
  accessToken: "",
  setLogin: (token, id) =>
    set({ isLoggedIn: true, accessToken: token, id: id }),
  setLogout: () => set({ isLoggedIn: false, accessToken: "", id: null }),
  test: () =>
    set((state) => {
      console.log(state.accessToken);
      return {};
    }),
}));

身份验证 API:

import { AxiosResponse, isAxiosError } from "axios";
import { UserAccountType } from "../types/userInfo.type";
import api from "./api";
import { useAuthStore } from "../store/authStore";

interface User {
  token: string;
  id: number;
}

export class AuthApi {
  private static setLogin(token: string, id: number): void {
    useAuthStore().setLogin(token, id);
  }

  static async login(userCred: Partial<UserAccountType>) {
    let success = false;
    let errorMessage = "";
    try {
      const response = await api.post<User>("/auth/login", userCred, {
        withCredentials: true,
      });
      if (response.status === 200) {
        const token = response.data.token;
        const id = response.data.id;
        this.setLogin(token, id);
        console.log("authenticated");
        success = true;
      }
    } catch (err) {
      if (isAxiosError(err)) {
        const status = err.response?.status;
        console.log(err);
        switch (status) {
          case 401:
            errorMessage =
              "Invalid Email or Password. Try again or click Forgot password to reset it.";
            break;
          default:
            errorMessage = `${err.message}. Please try again.`;
        }
      }
    }

    return { success, errorMessage };
  }
}
javascript reactjs async-await static-methods zustand

评论

0赞 Jaromanda X 11/13/2023
你知道什么是方法吗?提示:使用而不是访问一个 - 虽然,它也是一种私人方法,您可能还需要做其他事情......staticclassAuthApithis
0赞 Aslan 11/13/2023
@JaromandaX,@tao谢谢。在我的代码中,该方法也是一个静态方法,这意味着我可以在 using 中调用另一个静态方法。我不认为这是问题所在。即使使用 也没有解决问题。loginloginthisAuthApi.setLogin
0赞 Jaromanda X 11/13/2023
使用 AuthApi.setLogin 没有解决问题...因为 setLogin 是私有的(我假设您使用打字稿) - 尝试this.#setLogin
0赞 Jaromanda X 11/13/2023
嗯,如果你使用的是打字稿 - 你的代码应该真的可以工作(我认为)
0赞 Aslan 11/13/2023
@JaromandaX是的,我正在使用 Typescript。这是一个非常奇怪的情况,因为我整天都在检查代码,看起来它必须有效!除非这是特定于 Zustand 的问题。

答: 暂无答案