所以這是我的問題:
import sanityClient from '@sanity/client';
export const client = sanityClient({
projectId: import.meta.env.VITE_APP_SANITY_PROJECT_ID ,
dataset: 'production',
apiVersion: '2022-09-08',
useCdn: true,
token: import.meta.env.VITE_APP_SANITY_TOKEN,
ignoreBrowserTokenWarning: true
});
對于這個專案,我使用理智客戶端
import { useState,useEffect } from 'react'
import {client} from './client'
function App() {
const [User, setUser] = useState()
useEffect(()=>{
const getUserData=()=>{
const query = `*[_type == "user" && _id == 'John']`;
client.fetch(query).then((data)=>{
console.log(data[0]) //return data as expected
setUser(data[0])
console.log(User) //return undefined
})
}
getUserData()
},[])
為什么當我重新加載頁面時 setUser 不能在 useEffect 中作業并回傳未定義?
uj5u.com熱心網友回復:
你會。不能立即獲取資料 像這樣使用新的 useEffect
import { useState,useEffect } from 'react'
import {client} from './client'
function App() {
const [User, setUser] = useState()
useEffect(()=>{
const getUserData=()=>{
const query = `*[_type == "user" && _id == 'John']`;
client.fetch(query).then((data)=>{
setUser(data[0])
})
}
getUserData()
},[])
useEffect(()=>{
if (User) {
console.log(User)
}
},[User])
uj5u.com熱心網友回復:
你不會得到任何日志,但你的代碼是正確的。這是因為
setState(updater[, callback])
setState告訴它的子組件并且組件需要重新渲染。所以你不會立即得到改變的狀態值。如果您在 之前控制臺日志,您useState首先會看到
它顯示未定義但在重新渲染后您將獲得更新的狀態值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/505614.html
標籤:javascript 反应 网络开发服务器
