Javascript AXIOS:对API的第一次调用返回默认状态

Javascript AXIOS:对API的第一次调用返回默认状态,javascript,reactjs,rest,get,axios,Javascript,Reactjs,Rest,Get,Axios,我正在向数据库发出get请求以获取一些数据。它总是首先返回默认状态(空对象)。然后它按预期获取数据。我该如何解决这个问题 export default function useEventIdSearch(id) { const [loading, setLoading] = useState(true) const [error, setError] = useState(false) const [event, setEvent] = useState({}) useEffe

我正在向数据库发出get请求以获取一些数据。它总是首先返回默认状态(空对象)。然后它按预期获取数据。我该如何解决这个问题

export default function useEventIdSearch(id) {
  const [loading, setLoading] = useState(true)
  const [error, setError] = useState(false)
  const [event, setEvent] = useState({})

  useEffect(() => {
    setLoading(true)
    setError(false)
    let cancel
    axios({
      method: 'GET',
      url: `https://website.com/${id}?`,
      params: { api_key: 'dsfa' },
      cancelToken: new axios.CancelToken(c => cancel = c)
    }).then(res => {
      setEvent(res.data)
      setLoading(false)
      
    })
    .catch(e => {
      if (axios.isCancel(e)) return
      setError(true)
    })
    return () => cancel()
  }, [id])

  return { loading, error, event}
}

另外,我是一个新手,所以我为我的问题道歉,因为我猜这是我这边的一个错误,与异步JS有关。

这是预期的行为。您可能希望返回null并执行null检查,或者返回一个空数组,以easierAs@NadiaChibrikova提到的为准。React首先使用初始值进行初始渲染,然后执行ajax请求以检索数据。@Nadiachbrikova那么我必须将事件状态设置为null吗?我应该在代码中的什么地方进行空检查?或者null检查必须在呈现此数据的组件中?抱歉,我有点困惑。是的,您将
event
设置为
null
,无论调用该函数的是什么,都将执行检查。您可以在获取数据时呈现某种占位符,如
{event==null?加载:(此处更有用的东西)}
或者您可以使用
加载
标志来实现此目的。@nadiachbrikova谢谢!现在可以了。