Я использую контекстный API в настройке Gatsby, чтобы отслеживать состояние с именем userIsLoggedIn
. Я использую Firebase для аутентификации.
Это мой контекстный файл:
import { createContext } from "react"
export const AppContext = createContext(null)
Это мой компонент AppWrapper:
import React, { useState, useEffect } from "react"
import firebase from "../../config/firebase"
import { AppContext } from "../../context/AppContext"
const AppWrapper = ({ children }: any) => {
const [userIsLoggedIn, setUserIsLoggedIn] = useState(false)
const authListener = () => {
firebase.auth().onAuthStateChanged(user => {
if (user && user.emailVerified) {
setUserIsLoggedIn(true)
} else {
setUserIsLoggedIn(false)
}
})
}
useEffect(() => {
authListener()
}, [])
return (
<>
<AppContext.Provider
value={{
userIsLoggedIn,
}}
>
<main>{children}</main>
</AppContext.Provider>
</>
)
}
export default AppWrapper
Это моя страница индекса, где Я хочу отслеживать, вошел ли пользователь в систему, чтобы я мог показать / скрыть определенное содержимое:
import React, { useContext } from "react"
import { AppContext } from "../context/AppContext"
const IndexPage = () => {
const app = useContext(AppContext)
console.log("app", app)
return (
<>
{app && app.userIsLoggedIn && (
<>
<h1>Hello dearest user</h1>
<p>Welcome to your page.</p>
</>
)}
</>
)
}
export default IndexPage
Результатом работы моего console.log
в компоненте my IndexPage
при первой загрузке является следующее. страница или всякий раз, когда страница перезагружается:
app {userIsLoggedIn: false}
app {userIsLoggedIn: true}
Это означает, что моя страница перерисовывается и мой контент мерцает между контентом, который скрыт / отображается, когда пользователь вошел в систему. Есть ли способ избежать этого и сделать государство более мгновенным? Я открыт для любых предложений:)