【问题标题】:axios call data return useState undefinedaxios 调用数据返回 useState undefined
【发布时间】:2021-02-08 08:56:41
【问题描述】:

我想从 API 服务器获取数据。

const [datas, setDatas]=useState({
        datas: []
});
useEffect(()=> {
        apiClient.post(url) // apiClient is axios.create function
        .then((response)=>
            setData(datas: response.data.response))
},[])

但是console.log(data) 返回undefined。但是,如果修复部分代码或做其他事情,它会得到正确的值。

所以我删除了useEffect的deps。然后我陷入了API调用循环。我找到的解决方案之一是将 useState 的初始值放入一个空数组中。但是,即使您将其放入一个空数组中,该值也会以 undefined 的形式返回。
调用服务器没有问题。 console.log(response) 返回一个有效的响应值。
如果您能告诉我解决方案,我将不胜感激。

【问题讨论】:

  • 您的回复是什么样的?它有一个名为“response”的键吗?
  • 抱歉调用错误已更正。数据类型为json
  • 键名为“response”
  • 您的代码在语法上无效,不会运行

标签: reactjs axios


【解决方案1】:

试试这个方法

useEffect(()=> {
        apiClient.post(url) // apiClient is axios.create function
        .then((response)=>
            setStations({datas: response.data.response})
},[])

【讨论】:

    【解决方案2】:

    你应该使用你命名的 setDatas:

        useEffect(()=> {
            apiClient.post(url) // apiClient is axios.create function
            .then((response)=>
                setDatas({datas: response.data.response)})
    },[])
    

    【讨论】:

      【解决方案3】:

      您对useState 的使用并不完全正确。 如果您只想要一个数组,请使用const [datas, setDatas] = useState([])。不需要额外的继承。这导致:

      useEffect(()=> {
              apiClient.post(url) // apiClient is axios.create function
              .then((response)=>
                  setData(response.data.response)
      },[])
      

      假设 response.data.response 是所需的数组。

      如果你坚持继承(useState({datas: []}),那么设置的时候也需要换行:...setData({datas: response.data.response})

      【讨论】:

        猜你喜欢
        • 2020-05-01
        • 1970-01-01
        • 2018-09-03
        • 2019-06-20
        • 2021-09-20
        • 2021-11-17
        • 1970-01-01
        • 1970-01-01
        • 2018-07-29
        相关资源
        最近更新 更多