這段代碼存在某種問題,所以我一直在用 console.log()“除錯”它。這里的結果沒有任何意義。這段代碼有什么問題?我很好奇為什么“useEffect”中的console.logs為空,所以我一直在檢查它,這很奇怪,因為在同一個“if”中有一個特定的值,但是當它突然被使用時is lost => null。怎么辦?為什么?

useEffect(() => {
getProfile()
console.log(email)
console.log(id)
console.log(type)
}, [])
async function getCurrentUser() {
const {
data: { session },
error,
} = await supabase.auth.getSession()
if (error) {
throw error
}
if (!session?.user) {
throw new Error('User not logged in')
}
return session.user
}
async function getProfile() {
try {
const user = await getCurrentUser()
console.log(user.id);
let { data, error, status } = await supabase
.from('users')
.select()
.eq('uid', user.id)
.single()
console.log(data.type)
if (error && status !== 406) {
throw error
}
if (data) {
console.log(data.type)
setEmail(data.email)
setType(data.type)
setId(data.uid)
console.log(type)
}
console.log(type)
} catch (error: any) {
alert(error.message)
}
uj5u.com熱心網友回復:
一切正常。useEffect 中的console.log()內部useEffect和之后的async getProfile()呼叫將同步執行。所以前3個日志是未定義的,它是正確的。從 useState 回傳的 setType、setEmail 和所有 setter,它們將異步更新狀態(或者通過閉包函式更正確),所以這意味著,
setEmail(data.email)
setType(data.type)
setId(data.uid)
console.log(type)
正在做它的作業。要正確記錄它,請將型別、id 和電子郵件狀態添加到 useEffect 掛鉤的依賴項陣列中。隨著資料的變化,它會觸發重新渲染并使用更新的資料再次呼叫 useEffect。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517338.html
