【问题标题】:How do I export "user" object from my TopBar.js to App.js?如何将“用户”对象从我的 TopBar.js 导出到 App.js?
【发布时间】:2021-11-19 10:54:52
【问题描述】:

TopBar.js 基本上是一个处理身份验证的 AppBar 组件,如果用户登录,我会得到一个对象“用户”,如何将这个“用户”对象导出到 App.js?

如果我设法将其导出到 App.js,我想将其导出到另一个组件创建,该组件可以处理向我的数据库添加内容

我正在使用 React 和 Firebase

这是我的 useEffect 函数

useEffect(() => {
  const unsubscribe = auth.onAuthStateChanged((authUser) => {
    if (authUser) {
      // if user has logged in...
      setUser(authUser)
      if(authUser.displayName){   }
      else{
        return authUser.updateProfile({
          displayName : userName
        });
      }
      
    } else {
      // if user has logged out... 
      setUser(null);
    }
    
  })
  return () => {
    // perform some cleanup actions
    unsubscribe();
  }
}, [user, userName]);

【问题讨论】:

  • 你应该创建一个上下文。
  • 您能详细说明一下吗?就像我知道上下文可以用来建立层次结构一样,但我对实现部分感到困惑......

标签: javascript reactjs firebase firebase-realtime-database firebase-authentication


【解决方案1】:

App.js 文件中,您可以创建一个处理此问题的上下文。在这种情况下,您有:

const AuthContext = createContext();

现在可以使用 Provider 组件来包装整个应用程序,如下所示:

// the user value comes from the state created
<AuthContext.Provider value={{user}}>
  
</AuthContext.Provider>

然后你可以使用useContext钩子从任何组件访问这个用户值:

const { user } = useContext(AuthContext);

// you can go on and access the `user` value anywhere in the component  

您可以访问this article进行深入解释

【讨论】:

  • 有没有办法使用它来将孩子的道具传递给父母?在这种情况下,TopBar 是我的 App.js 的子组件,我认为在这里使用 useContext 没有意义......
  • 您还可以将 setUser 函数与用户一起传递给提供者值。这样您就可以在子组件中访问 setUser 并在应用程序中的任何位置(包括父组件)使用它。
  • 谢谢!我设法自己解决了这个问题,我将此检索到的用户存储在 useState 中,并且每当我重定向到名为 /create 的页面时,它的状态变为 null 并且出现错误,我应该尝试在这种情况下使用 useContext 吗?
  • 是的,这是一个很好的 useContext 用例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多