You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在React中渲染多对象是否需新增useState?如何整合current与location到data?

React天气数据状态处理问题解答

1. 接口返回多个对象时,是否需要创建新的useState?

不需要额外创建新的useState。你完全可以用现有的data状态存储整个接口返回的对象(包含current、location等子对象)。只有当这些子数据需要独立管理、或者组件不同部分要单独更新它们时,才考虑拆分多个useState。如果只是统一获取和展示,单状态更便于维护。

2. 如何将接口返回的current和location数据整合到data状态中?

你的代码其实已经在做这件事了,但有个小问题:data的初始状态是[](数组),但接口返回的是对象,所以要把初始状态改成空对象{},避免类型不匹配的问题。修改后,setData(res)会直接把包含current和location的整个接口响应存入data,之后就能通过data.current和data.location访问对应数据。

修改后的完整代码示例:

const [data, setData] = useState({}); // 改为空对象,匹配接口返回格式
const [input, setInput] = useState("");

const getWeather = async () => {
  try {
    const response = await fetch(
      `http://api.weatherapi.com/v1/current.json?key=${process.env.API_KEY}&q=${input}&aqi=yes`
    );
    const res = await response.json();
    console.log(res);
    setData(res); // 直接存入完整响应对象,自动包含current和location
  } catch (error) {
    console.error("获取天气数据失败:", error);
    // 可在此添加错误提示逻辑,比如弹窗告知用户
  }
};

const onSubmit = (e) => {
  e.preventDefault();
  getWeather();
  setInput("");
};

后续使用数据时,比如展示城市名称和当前温度:

{data.location && data.current && (
  <div>
    <p>城市:{data.location.name}</p>
    <p>当前温度:{data.current.temp_c}℃</p>
  </div>
)}

这里加了&&判断是为了避免数据未加载时访问undefined的属性导致报错。

内容的提问来源于stack exchange,提问作者Ronell Villamil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:10:19