使用 React useContext 钩子在调度调用后不更新 React 状态
React state is not updated after dispatch call using React useContext hook
你们好,这里是 React 初学者。
所以基本上,我正在尝试使用 React useContext
钩子来获取更新的状态。
state
设置在放置dispatch的函数调用中,函数调用绑定到按钮的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
你们好,这里是 React 初学者。
所以基本上,我正在尝试使用 React useContext
钩子来获取更新的状态。
state
设置在放置dispatch的函数调用中,函数调用绑定到按钮的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