我試圖從我的 firebase.js 組態檔中宣告一個布林值,該檔案依賴于檢查用戶是否登錄的 if-else 陳述句。
我想將用戶的登錄狀態存盤在一個布爾變數中,并在我的 React 應用程式的不同組件中匯出該變數。
因此,如果用戶已登錄,我希望我的變數 isLoggedIn 為真并將其匯出。但我希望在匯出之前根據登錄狀態更新 isLoggedIn 布林值。
這是我的 firebase.js 檔案
import { initializeApp } from 'firebase/app';
import { getAuth } from "firebase/auth";
const firebaseConfig = {
//private keys
};
const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);
//Problem
let isLoggedIn = false;
function checkLoggedInStatus() {
if (auth.currentUser !== null) { //i.e. user is signed in
isLoggedIn = true;
}
return isLoggedIn;
}
checkLoggedInStatus();
export isLoggedIn;
uj5u.com熱心網友回復:
這里(至少)有兩個問題。
除其他外,緊隨其后export
的可能是:
- 后跟變數名的宣告(例如
export let foo = 5;
) - 這會初始化變數并將其從模塊中匯出為一行 function
或class
- 與上述類似default
, 如果你想表明你正在匯出的是默認匯出- 括號,如果您要匯出已宣告的識別符號 - 例如
export { foo }
但是做export isLoggedIn;
是無效的語法 - 它不屬于這些類別(也不屬于任何其他允許的構造)。
另一個問題是,.currentUser
如果身份驗證未完成初始化,則該屬性可能還不存在。確保您先等待它完成。請改用觀察者版本。
由于這是異步的,因此您有幾個選項可以將該資訊傳遞給腳本的其余部分。我推薦的第一個是讓這個 auth 模塊呼叫你腳本的其余部分(換句話說,讓這個模塊成為你的入口點,或者接近它)。例如:
import { initializeApp } from 'firebase/app';
import { getAuth, onAuthStateChanged } from "firebase/auth";
import { renderApp } from './renderApp';
const firebaseConfig = {
//private keys
};
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
onAuthStateChanged(auth, (user) => {
if (user) {
renderApp(user);
} else {
// No user
renderApp();
}
});
renderApp
取決于用戶的其余代碼的起點在哪里。您不能輕松地isLoggedIn
直接從 firebase 模塊匯出,因為它是異步檢索的 -renderApp
使用它呼叫然后傳遞值是最好的方法。
您還可以從此 firebase 模塊腳本中匯出 Promise,該腳本決議用戶是否登錄,但這將要求模塊的所有使用者.then
在能夠使用它之前必須呼叫該值,這可能會很亂。最好使用您的 firebase 模塊腳本作為入口點,并且僅在 auth 物件完成加載后才呼叫腳本的其余部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492824.html