函数调用后反应状态不更新
React state not updating after function call
我试图在进行更改之前更新我的反应状态,但它没有更新。更改状态是异步的,但我不知道如何在下面的代码示例中更新上下文中的状态:
const initialState = {
user: null
}
const [state, dispatch] = useReducer(reducer, initialState);
const updateUser = async () => {
const res = await axios.get('currentUser')
//res.data.user is the user stored in the database
dispatch({ type: SET_USER, payload: res.data.user })
}
const getUser = async () => {
try {
await updateUser()
if(state.user) {
console.log('User is not null')
} else {
console.log('User is null')
}
} catch (err) {
//Handle error
}
}
这是减速器:
export default (state, action) => {
{ ... }
case SET_USER: return { ...state, user: action.payload }
{ ... }
}
我正在使用 useEffect
挂钩在我的组件中调用 getUser
函数:
useEffect(() => {
getUser()
}, [])
此代码示例始终 returns User is null
因为调用 updateUser
函数时状态未更新。
注意:这是上下文和减速器的简单版本
您正在等待获取,但不等待更新状态。
useEffect(() => {
getUser()
}, [])
useEffect(() => {
if(state.user) {
console.log('User is not null')
} else {
console.log('User is null')
}
}, [state.user])
我试图在进行更改之前更新我的反应状态,但它没有更新。更改状态是异步的,但我不知道如何在下面的代码示例中更新上下文中的状态:
const initialState = {
user: null
}
const [state, dispatch] = useReducer(reducer, initialState);
const updateUser = async () => {
const res = await axios.get('currentUser')
//res.data.user is the user stored in the database
dispatch({ type: SET_USER, payload: res.data.user })
}
const getUser = async () => {
try {
await updateUser()
if(state.user) {
console.log('User is not null')
} else {
console.log('User is null')
}
} catch (err) {
//Handle error
}
}
这是减速器:
export default (state, action) => {
{ ... }
case SET_USER: return { ...state, user: action.payload }
{ ... }
}
我正在使用 useEffect
挂钩在我的组件中调用 getUser
函数:
useEffect(() => {
getUser()
}, [])
此代码示例始终 returns User is null
因为调用 updateUser
函数时状态未更新。
注意:这是上下文和减速器的简单版本
您正在等待获取,但不等待更新状态。
useEffect(() => {
getUser()
}, [])
useEffect(() => {
if(state.user) {
console.log('User is not null')
} else {
console.log('User is null')
}
}, [state.user])