You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React调用OMDb API无控制台返回结果,Postman测试正常的问题求助

React调用OMDb API无控制台返回结果,Postman测试正常的问题求助

嘿,我来帮你排查下这个头疼的问题!Postman能跑通但React里没结果,大概率是踩了这几个常见坑,你逐个检查下:

  • 先看跨域(CORS)问题:Postman是独立工具,不受浏览器同源策略限制,但React在浏览器里运行,OMDb API如果没配置允许你的本地开发域名跨域,浏览器会直接拦截请求。你打开浏览器DevTools的Network面板,看看这个请求是不是被标为blocked,或者Console里有没有CORS相关的红色报错?这是最常见的原因。

  • 检查React钩子的导入! 你的代码里用了useStateuseEffect,但完全没写导入语句啊!必须在文件顶部加上:

    import { useState, useEffect } from 'react';
    

    要是没加这个,组件会直接报错,请求根本没法执行,控制台自然没输出。

  • 换HTTPS协议试试:你代码里用的是http://,改成https://再试试?有些API现在强制要求HTTPS,用HTTP的话可能被重定向或直接拒绝,Postman可能自动处理了这个,但浏览器里就不行。

  • 核对API密钥和请求URL:虽然Postman能用,但你代码里的key是不是和Postman里的完全一致?有没有复制时少了字符或多了空格?另外把代码里的请求URL直接复制到浏览器地址栏访问,看看能不能拿到结果,这样能快速排除代码逻辑问题。

  • 仔细看控制台的错误信息:有时候错误会被忽略,打开Console面板的「Errors」标签,看看有没有红色报错,比如组件渲染错误、变量未定义之类的,这些都会导致请求逻辑走不到打印那一步。

另外,你可以在fetch最开头加个打印,比如console.log('开始请求API了'),先确认useEffect是不是正常执行了。

我给你补全导入后的完整代码片段,你可以试试:

import { useState, useEffect } from 'react';

const average = (arr) =>
  arr.reduce((acc, cur, i, arr) => acc + cur / arr.length, 0);
const key = "b5873f01";

export default function App() {
  const [movies, setMovies] = useState([]);
  const [watched, setWatched] = useState([]);

  useEffect(() => {
    console.log('触发API请求');
    fetch(`https://www.omdbapi.com/?apikey=${key}&s=avatar`)
      .then((res) => {
        if (!res.ok) {
          throw new Error(`请求失败,状态码:${res.status}`);
        }
        return res.json();
      })
      .then((data) => {
        console.log('拿到数据了:', data);
        if (data.Search) setMovies(data.Search);
        else console.log('返回数据里没有Search字段');
      })
      .catch((error) => {
        console.error('请求出错:', error);
      });
  }, []);

  return (
    <div>
      <h1>搜索到的电影</h1>
      {movies.length > 0 ? (
        <ul>
          {movies.map(movie => (
            <li key={movie.imdbID}>{movie.Title}</li>
          ))}
        </ul>
      ) : (
        <p>加载中...</p>
      )}
    </div>
  );
}

按上面的步骤排查,应该能找到问题所在!

备注:内容来源于stack exchange,提问作者abdo jama

火山引擎 最新活动