为什么我无法在 useEffect 中使用 Okta 钩子? (反应)

时间:2021-07-20 22:14:36

标签: javascript reactjs use-effect use-state okta

最近我发布了一个问题,其中我在使用 TypeScript(用于上下文)的 React/Okta 项目中遇到了一些条件渲染问题:

Am I unable to use inline "if" with useEffect in a functional React component?

我已经解决了这个问题,但现在我在以下组件中遇到了另一个问题:

import pkg from './pkg.cjs';
console.info(`Starting ${pkg.name} v${pkg.version}`);

当我成功登录 Okta 时,import React, { useState, useEffect } from 'react'; import { useOktaAuth } from '@okta/okta-react'; import { Dropdown } from 'semantic-ui-react'; import { UserInfo } from '../../interfaces/UserInfo'; export const HeaderUserMenu = () => { // Okta and State hooks const { authState, oktaAuth } = useOktaAuth(); const [ userInfo, setUserInfo ] = useState<UserInfo>({}); // Log current user data const logUser = () => { console.log(userInfo); } // Watch the auth state and user info for changes, update state. useEffect(() => { if (!authState || !authState.isAuthenticated) { setUserInfo({}); } else { oktaAuth.getUser((info: UserInfo) => { setUserInfo(info); }) } }, [authState, oktaAuth]); // If we have an empty user object, return nothing, otherwise... if (Object.keys(userInfo).length === 0) { return null; } else { return ( <Dropdown item text={userInfo.name}> <Dropdown.Item onClick={logUser}>Log User</Dropdown.Item> </Dropdown> ) } } 钩子中的 authStateoktaAuth 中应该有东西,并且通过 useOktaAuth()useState 钩子,我应该能够获取当前用户的信息。

然而,似乎钩子中的 useEffectauthState 并没有让它进入正在运行的效果,所以即使我当前登录了应用程序,这个组件也不是完全被渲染。

难道不能在效果中使用这样的钩子吗?文档使用了这个确切的模式,所以我会假设这将是 oktaAuth 和 Effect 钩子的正确用法,但我无法让它工作。

此外,为了解决我之前的问题,我必须做的一件事是在效果开始时添加检查 useOktaAuth(),否则它 - 总是 - 返回错误:

!authState

所以我不确定这是否与它有关? authState 或 oktaAuth 没有理由应该为空,除非钩子不起作用?或者将该钩子与 useEffect 结合使用时存在一些问题。

有什么想法吗?

0 个答案:

没有答案