使用React useContext hook进行分派调用后,反应状态不会更新
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用React useContext hook进行分派调用后,反应状态不会更新相关的知识,希望对你有一定的参考价值。
[伙计们,React初学者在这里。因此,基本上,我正在尝试使用React useContext
钩子获取更新后的状态。
state
设置在放置了分派的函数调用中,并且该函数调用绑定到按钮onClick事件。
调用分派的函数:
const fetchLocation = async (id: number) => {
const [, result] = await getLatestLocation()
dispatch({
type: "LOCATION_FETCHED",
payload: result
})
console.log(result) //this prints the latest/updated location even on button first click
}
减速器:
case "LOCATION_FETCHED": {
return {
...state,
location: payload,
}
}
组件中的函数调用:
const {
fetchLocation,
location
} = React.useContext(locationContext)
const [fetchingLocation, setFetchingLocation] = useState(false)
const getLocation = (id: number) => {
fetchLocation(id)
.then(() => {
setFetchingLocation(true)
})
.finally(() => {
setFetchingLocation(false)
console.log(location) //this prints nothing or empty on the first button click
})
}
按钮onClick函数绑定:
onClick={() => getLocation(143)}
我不确定发生了什么,第一次单击将什么都不会记录,但是在第二次单击时,我得到了更新的位置状态。
正如评论所说,调度是异步进行的。因此,如果您想知道新值,则应使用useEffect挂钩,如下所示。
useEffect(() => {
console.log(location)
}, [location])
您可以在此处了解更多信息:https://reactjs.org/docs/hooks-effect.html
您可以使用useEffect
来获取每次location
更改的更新,以下功能将在每次位置更改时执行:
useEffect(() => {
if(location) { // <-- Check if location is available or not
console.log(location) //<--- Check your location here, after first click
}
},[location]); // <--- Will check if location is changed or not , if changed call the above function
以上是关于使用React useContext hook进行分派调用后,反应状态不会更新的主要内容,如果未能解决你的问题,请参考以下文章
使用 useState 和 useContext React Hooks 持久化 localStorage
结合 React useContext 和一次性数据加载(React hooks)的最佳实践?
了解函数化组件 HooksuseState,useEffect,useContext,useReducer
了解函数化组件 HooksuseState,useEffect,useContext,useReducer
ZF_react hooks useState的实现 useCallback useMemo useReducer useContext