我怎样才能让这个简单的 API 获取调用工作?

How can I get this simple API fetch call work?

我是一名新的 React 开发人员。尝试使用挂钩调用 API 并在屏幕上显示数据(之后会尝试扰乱分页和过滤结果)但是由于某种原因,获取调用不起作用,当我显示它时它会起作用在 Postman 中但不在我的应用程序中

***main state***

const [apiData, setApiData] = useState({})

***my use Effect hook***

useEffect(() => {

async function getMusicData(){
const music = await fetch('theaudiodb.com/api/v1/json/523532/searchalbum.php?s=daft_punk')
.then(res => res.json())
setApiData(music)
console.log(apiData)
}
console.log(apiData)
getMusicData()
},[])

***my rendering attempt***

return (
<Router>
<Navbar />
{dataApi.map((s, i) => (

))}
</Router>
);

再次(括号下也有红色波浪线!)showing the red squiggly:

Showing API call results in postman

console.log(apiData/music) gets me this also

如果我能为您提供更多信息,请告诉我,我想首先了解为什么它不起作用! 感谢您的回复

Reference doc

删除“.then”关键字,不需要那个。

 const music = await fetch('theaudiodb.com/api/v1/json/523532/searchalbum.php?s=daft_punk');

这一行之后就这样写:

 let response = await music.json();

首先你的url是错误的。你的抓取 url 应该有 https

https://theaudiodb.com/api/v1/json/523532/searchalbum.php?s=daft_punk

所以,如果您使用 async 关键字,这意味着 fetch 将异步工作,因此您不需要 then() 函数。

你应该喜欢这个

 const music = await fetch(
    "https://theaudiodb.com/api/v1/json/523532/searchalbum.php?s=daft_punk"
  );
  const response = await music.json();

那么你应该使用你的 setApiData()

  setApiData(response);

如果你在这里添加 console.log(apiData) 你什么也看不到。因为您的 setApiData() 函数是异步的,所以您可以在下次渲染时看到它。

I get a red squiggly under the brackets also!

我认为,这是关于括号之间的间距。您应该添加 html 元素(div、跨度等...)

最后,我修复了你的代码。你可以看看。

export default function App() {
  const [apiData, setApiData] = useState([]);

  useEffect(() => {
    async function getMusicData() {
      const music = await fetch(
        "https://theaudiodb.com/api/v1/json/523532/searchalbum.php?s=daft_punk"
      );
      const response = await music.json();

      setApiData(response.album);
    }
   
    getMusicData();
  }, []);

  return (
    <div className="App">
      {apiData.map((s) => (
        <div key={s.idAlbum}>{s.strAlbum}</div>
      ))}
    </div>
  );
}

https://codesandbox.io/s/elegant-rgb-3zzo3f?file=/src/App.js:395-401