首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在重新加载react时运行函数

如何在重新加载react时运行函数
EN

Stack Overflow用户
提问于 2021-09-24 12:53:41
回答 1查看 26关注 0票数 0

我正在使用congnito进行身份验证,并尝试创建一个privateRoute。

我目前使用的是redux和amazon-cognito identity-js

代码语言:javascript
复制
export const cognitoSignIn = async ({
  email,
  password,
}: SignInInfo): Promise<CognitoUserSession> => {
  return new Promise((resolve, reject) => {
    console.log(email, password);

    const authenticationDetails = new AuthenticationDetails({
      Username: email.trim(),
      Password: password.trim(),
    });
    const cognitoUser = new CognitoUser({
      Username: email,
      Pool: userPool,
    });

    cognitoUser.authenticateUser(authenticationDetails, {
      onSuccess: (result) => {
        if (!currentUser) {
          currentUser = userPool.getCurrentUser();
        }

        currentUser.getSession((err: any, session: CognitoUserSession) => {
          if (err) {
            reject(err);
          } else {
            resolve(session);
          }
        });
      },
      onFailure: reject,
    });
  });
};

代码语言:javascript
复制
export const signIn =
  (signinInfo: SignInInfo) =>
  async (dispatch: Dispatch<UpdateToken | UpdateError>) => {
    try {
      const auth: CognitoUserSession = await cognitoSignIn(signinInfo);
      const accessToken = auth.getAccessToken().getJwtToken();

      localStorage.setItem("user", JSON.stringify(accessToken));
      dispatch(updateToken(accessToken));
    } catch (error: any) {
      dispatch(updateError(error));
    }
  };

我的问题与上面的代码无关。

当你登录时,会在本地存储中创建一个令牌。

刷新时,要获取本地存储中令牌的状态,需要使用cognito getSession函数。

但是getSession函数是一个异步函数

如何通过在渲染之前执行函数来获取数据?

EN

回答 1

Stack Overflow用户

发布于 2021-09-24 14:19:56

我的建议是使用一个“加载状态”,只要你在等待你的异步函数,它就会被呈现。

例如:

代码语言:javascript
复制
const example = () => {
    useState[isLoading, setIsLoading] = useState(false)
    
    useEffect(() => {
        const asyncFunction = async() => {
            setIsLoading(true)
            await(something...)
            setIsloading(false)
        }
        asyncFuntion()  
    }, [])

    if(isLoading) return (e.g LoadingSpinner)

    return (your component)
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69315379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档