reactjs - 使用 React useContext 钩子(Hook)在调度调用后不更新 React 状态

标签 reactjs use-context

你们好,这里是 React 初学者。
所以基本上,我正在尝试使用 React useContext Hook 获取更新后的状态。

state 设置在放置调度的函数调用中,函数调用绑定(bind)到按钮的 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
  }

reducer :

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函数绑定(bind):

onClick={() => getLocation(143)}

我不确定发生了什么,第一次点击不会记录任何内容,但在第二次点击时,我得到了更新的位置状态。

最佳答案

正如评论所说,调度是异步进行的。因此,如果您想知道新值,您应该像这样使用 useEffect Hook 。

useEffect(() => {
  console.log(location)
}, [location])

您可以在此处阅读更多信息:https://reactjs.org/docs/hooks-effect.html

关于reactjs - 使用 React useContext 钩子(Hook)在调度调用后不更新 React 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61820454/

相关文章:

javascript - 上下文 API 中的 React useState 值始终使用初始值而不是更新值

javascript - TypeScript 错误 - 类型 'Ticket[] | undefined' 不是数组类型

reactjs - 如何在休息时在管理员中建立facebook登录?

reactjs - 在使用 react-router 和 redux 时,Context Provider 应该嵌套在什么嵌套中?

reactjs - 为什么我的 React 上下文没有更新?

javascript - 状态不随 useContext 改变

javascript - 我可以在 useEffect 之外声明变量吗? react 钩子(Hook)

reactjs - 在父组件中单击渲染新组件

ios - iOS 上显示键盘后如何固定标题?