Rumah > Soal Jawab > teks badan
P粉2768766632023-09-04 12:40:54
Dalam kod anda, useEffect akan dilaksanakan apabila nilai sesi atau penghala berubah (parameter kedua useEffect). Oleh itu, if no else tidak dilaksanakan dalam larian useEffect yang sama, walaupun ia dilaksanakan dalam dua larian berbeza yang mungkin dilaksanakan secara berturut-turut.
Ini adalah salah satu cara untuk mencapai apa yang anda idamkan.
Contoh pelaksanaan:
const App = (props) => { const [isLoggedIn, setIsLoggedIn] = useState(false); useEffect(()=>{ //apply the logic and set the state if(logic) setIsLoggedIn(true); },[]) return {isLoggedIn ? <ActiveApp /> : <Login />} }
P粉0356005552023-09-04 00:28:17
Akhirnya, saya jumpa puncanya.
Ia datang daripada cangkuk supabase auth helper, ia adalah fungsi async, ia tidak mengandungi status sama ada ia sedang dimuatkan atau ralat, yang bermaksud ia berada pada permulaan (yang bermaksud ia sedang dimuatkan).
Cara mudah untuk menyelesaikan masalah ini ialah menggunakan useSessionContext
。 useSessionContext
session
仍将以异步方式获取,但可以通过同步方式获取 isLoading
和 error
状态来解决此问题,并且它们可用于 useEffect
secara terus. session
isLoading dan error
secara serentak, dan ia boleh digunakan dalam cawangan bersyarat dalam useEffect🎜. 🎜
🎜Kod baharu akan kelihatan seperti ini: 🎜
import { useSessionContext } from '@supabase/auth-helpers-react'
const {isLoading, session} = useSessionContext()
useEffect(() => {
if (isLoading) {
console.debug('show loading page')
}
else if (session) {
console.debug('stay in page')
}
else {
console.debug('goto login')
router.push('/login').then(
() => {
console.debug('goto login done')
}
)
}
}, [session, isLoading, router])
balas0