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

React中useEffect与async/await使用问题:无法获取产品数据

React useEffect + async/await 无法获取JSON Server数据问题排查

1. 核心错误:URL格式错误

你的url变量少写了一个斜杠,正确地址应为http://localhost:3000/products,原代码里的http:/localhost:3000/products会导致请求地址无效,这是无法获取数据的直接原因。

2. 补充错误处理,避免静默失败

fetch请求不会对HTTP错误(如404、500)自动抛出异常,加上try/catch和响应状态判断,能快速定位问题:

const fetchData = async () => {
  try {
    const data = await fetch(url);
    // 判断请求是否成功
    if (!data.ok) {
      throw new Error(`请求失败,状态码:${data.status}`);
    }
    console.log("响应对象:", data); // 用逗号分隔保留对象结构
    const res = await data.json();
    console.log("产品数据:", res);
    setProducts(res);
  } catch (error) {
    console.error("获取数据出错:", error);
  }
}

3. 优化控制台打印方式

之前用"Data:" + data会把对象转成[object Response]这类无意义字符串,改用逗号分隔可以保留原对象结构,方便调试。

修正后的完整App.js代码

import './App.css';
import { useState, useEffect } from "react";

// 修正URL格式
const url="http://localhost:3000/products";

function App() {
  const [products, setProducts] = useState ([]);

  useEffect(() => {
    const fetchData = async () => {
      try {
        const data = await fetch(url);
        if (!data.ok) {
          throw new Error(`请求失败,状态码:${data.status}`);
        }
        console.log("响应对象:", data);
        const res = await data.json();
        console.log("产品数据:", res);
        setProducts(res);
      } catch (error) {
        console.error("获取数据出错:", error);
      }
    }
    fetchData();  
  }, []);

  console.log("当前products状态:", products);
 
  return (
    <div className="App">
      <h1>产品列表</h1>
      {/* 可选:渲染产品列表到页面 */}
      <ul>
        {products.map(product => (
          <li key={product.id}>{product.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;

内容的提问来源于stack exchange,提问作者Pablo Costa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:15:50