Reactjs 反应上下文API,钩子加载两次。一次没有数据,一次有数据

Reactjs 反应上下文API,钩子加载两次。一次没有数据,一次有数据,reactjs,react-hooks,react-context,Reactjs,React Hooks,React Context,我正在构建一个内部react应用程序,该应用程序带有一个flask后端,用于在flask会话中存储用户详细信息 My flask应用程序使用ADAL包处理Azure Active Directory用户身份验证 为了将用户详细信息输入我的react应用程序,我打了一些获取电话,可以毫无问题地获取数据 在我的react应用程序中,我第一次尝试使用钩子、createContext、useContext、useState和useState,出于某种原因,该应用程序看起来好像加载了我的头钩子两次。一次没

我正在构建一个内部react应用程序,该应用程序带有一个flask后端,用于在flask会话中存储用户详细信息

My flask应用程序使用ADAL包处理Azure Active Directory用户身份验证

为了将用户详细信息输入我的react应用程序,我打了一些获取电话,可以毫无问题地获取数据

在我的react应用程序中,我第一次尝试使用钩子、createContext、useContext、useState和useState,出于某种原因,该应用程序看起来好像加载了我的头钩子两次。一次没有数据,一次有数据

我在这里创建了一个问题示例,它显示在console.log中,头部触发两次

有没有办法避免这种情况?

这不是问题

const App = () => {
  const [user, setUser] = useState({});

  useEffect(() => {
    loadProfile().then(user => setUser(user));
  }, []);

  console.log(user); // you can log here 

您获得的是两次用户对象,因为在第一次渲染中您没有用户数据,而在第二次渲染中您从loadProfile获得用户数据。

如果您有任何疑问,请告诉我以避免此问题,在您将用户设置为您的状态之前,您的应用程序不应呈现AppSessionContext.Provider。那么,我使用useEffect的方式是否可能实现这一点?我看您已经解决了。专业提示:您不需要将返回值赋给变量,只要!在您最终返回之前加载了{return'load'}。感谢实现,我仍然感觉到它的渲染两次,但可能这就是它将被渲染两次的原因,这是渲染的自然效果,立即渲染,然后在状态更新时渲染。早期版本的React允许在初始渲染之前触发loadUser,但为了支持渲染后效果,已弃用该版本。