![](/img/trans.png)
[英]my Button in react dosen't work - I use useState and useEffect
[英]Why useState set don't work inside useEffect in react?How can i fix this?
所以這是我的問題:
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 中工作並返回未定義?
你會。 不能立即獲取數據 像這樣使用新的 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])
你不會得到任何日志,但你的代碼是正確的。 這是因為setState(updater[, callback])
setState告訴它的子組件和組件需要重新渲染。 所以你不會立即得到改變的 state 值。 如果您在useState
之前控制台日志,您會看到
起初它顯示未定義,但在重新渲染后,您將獲得更新的 state 值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.