【问题标题】:Im getting my coordinates but the state of 'data' isnt updating我得到了我的坐标,但“数据”的状态没有更新
【发布时间】:2026-01-18 04:10:02
【问题描述】:

我正在尝试制作一个简单的反应天气应用程序,该应用程序使用地理定位方法获取用户的当前位置。我希望 api 等待显示,直到它检索到它们的坐标。它获取我的坐标和数据,但不会更新“数据”值的状态。也许我没有指向正确的键/值或其他东西。

Code Sandbox
Data is retrieved

【问题讨论】:

  • 如果您在 setState 之前console.log(data),您会注意到您正在尝试检索不存在的值。 data.data[0].city_name 从响应中获取城市名称(您可能需要运行检查以确保返回数据)
  • 是的。响应是 {data : [] , count: 1}。所以你必须向下挖掘一层并使用 data.data 来获取 city_name

标签: javascript reactjs api weather


【解决方案1】:

您的请求正在运行,您只是没有正确解析响应。如果您查看控制台,您可以看到数据响应是一个包含名为 data 的数组的对象。您正在尝试将您的城市值分配给根对象中不存在的属性,而是在数据数组中包含的对象中。

尝试改变这个:

const data = await api_call.json();

this.setState({
  latitude: latitude,
  longitude: longitude,
  city: data.city_name,
  data: data,
  isLoaded: true
});

到这里:

const {data} = await api_call.json();

this.setState({
  latitude: latitude,
  longitude: longitude,
  city: data[0].city_name,
  data: data[0],
  isLoaded: true
});

尝试处理 data 数组中的 0 个或多个对象也是明智的。


还值得一提的是这一行:

const {data} = await api_call.json();

被称为object destructuring,和这样做是一样的:

let data = await api_call.json();
data = data.data;

【讨论】: