亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

注冊時存儲用戶名僅在頁面刷新后顯示(Firebase)

注冊時存儲用戶名僅在頁面刷新后顯示(Firebase)

智慧大石 2023-10-14 19:26:47
我是 React 和 Firebase 的新手,我一整天都在嘗試解決這個小的用戶注冊問題。希望有人能幫助我,我將不勝感激????我正在使用 React 和 Firebase 制作一個類似 twitter 的博客網站,目前正在使用 Firebase 的 auth.createUserWithEmailAndPassword() 方法使用用戶名注冊新用戶。這就是我正在做的:  import { auth } from '../firebase';  const onSubmit = async (data) => {    auth      .createUserWithEmailAndPassword(data.email, data.password)      .then((result) => {        result.user.updateProfile({          displayName: data.username,        });        setUserError(!userError);        window.localStorage.setItem('emailForSignIn', data.email);        setRedirect(true);      })      .catch((error) => {        setUserError(!userError);        setAlertMsg(error.message);      });  };用戶提交表單后,他們將被重定向到主頁,然后我將頁面設置為他們當前的用戶名。我通過設置用戶名的狀態來設置用戶名,然后將其作為道具傳遞到我的所有頁面。const Main = ({SignOut}) => {  const [userName, setUserName] = useState('')  useEffect(() => {    const getUserName = () => {      auth.onAuthStateChanged((user) => {        setUserName(user.displayName)        console.log('Current userName is: ', user.displayName);      });    }    getUserName()   }, [])      return (    <Router>      <Switch>          <Route exact path="/">            <Navbar userName={userName} SignOut={SignOut} />            <Tweets userName={userName} />          </Route>          <Route path="/profile">            <Navbar userName={userName} SignOut={SignOut} />            <Profile setUserName={setUserName} userName={userName} />          </Route>        </Switch>    </Router>  )}幾乎一切都很完美,但是他們的用戶名只有在注銷并重新登錄時才會顯示。任何幫助都會很棒!
查看完整描述

1 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

這是我遇到的一個超級菜鳥錯誤,但我沒有使用 useEffect 來設置用戶名,而是將 setUserName 狀態傳遞給我的注冊組件,并完全取消了 useEffect。這解決了一切。


  const onSubmit = async (data) => {

    auth

      .createUserWithEmailAndPassword(data.email, data.password)

      .then((result) => {

        result.user.updateProfile({

          displayName: data.username,

        });

        // This is the state i was missing.

        setUserName(data.username);

        setUserError(!userError);

        window.localStorage.setItem('emailForSignIn', data.email);

        setRedirect(true);

      })


查看完整回答
反對 回復 2023-10-14
  • 1 回答
  • 0 關注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號