使用React useContext钩子在分派调用后未更新React状态

时间:2020-05-15 13:28:24

标签: reactjs use-context

好的,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)}

我不确定发生了什么,第一次单击将什么都不会记录,但是在第二次单击时,我得到了更新的位置状态。

1 个答案:

答案 0 :(得分:1)

正如评论所说,调度是异步进行的。因此,如果您想知道新值,则应使用useEffect钩子。

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

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