javascript - 映射数组并返回 API 结果

标签 javascript reactjs

尝试使用简单的代码来映​​射数组,并针对每个结果在 API 中搜索该结果并输出从 API 检索到的数据。

import React from 'react';

const App = () => {

  let artistData = require('./mass-artists.json')

  artistData.map(
    (theArtist) => {
        fetch(`[url]https://api.scryfall.com/cards/search?q=a:[/url]"${theArtist}"`)
            .then((response) => {
              return response.json();
            })
            .then((myJson) => {
              console.log(JSON.stringify(myJson)); //returns the JSON data, so I know it's working
              console.log(myJson.data[0].name); //returns the first card name
            })
    }
  )

  return(<span>This is here so React doesn't yell at me about no return statement.</span>)
}

export default App;

JSON 文件只是万智牌艺术家的姓名列表。该 map 映射了艺术家列表并在 API 上搜索他们。我想对 map 执行通常的操作,即在前端显示一些内容。但我很难让任何事情发挥作用。我可以将内容记录到控制台或执行任何 Javascript 功能,例如设置某些内容的innerHTML,但是我将在哪里/如何放置 return 语句以在 span 标记中显示结果?甚至诸如“你好!”。

一如既往地感谢!

最佳答案

如果您需要更多有关状态的帮助,我建议您研究一下新的 hooks api 或旧的 React 类组件。以下代码将搜索数据,然后设置状态,以便组件知道要更新。 您可能也不想在渲染中直接运行该 map ,因为这会在每次组件更新时重新运行您的提取。

import React, { useState, useEffect } from "react";

const App = () => {
  const [artistsInfo, setArtistsInfo] = useState([]);

  useEffect(async () => {
    let artistData = require("./mass-artists.json");

    const promises = artistData.map(theArtist => {
      return fetch(
        `[url]https://api.scryfall.com/cards/search?q=a:[/url]"${theArtist}"`
      )
        .then(response => {
          return response.json();
        })
        .then(myJson => {
          return myJson.data;
        });
    });
    const results = await Promise.all(promises);
    // results is an array of arrays because that is what your data seemed to be
    // you could use lodash flatten if you want to get a single array

    setArtistsInfo(results);
  }, []); // empty array so it only runs once

  // you could have a second useState to add a loader if you want

  return artistsInfo.map(infoArray => {
    return infoArray.map(singleInfo => {
      return <span key={singleInfo.id}>{singleInfo.name}</span>;
    });
  });
};

export default App;

关于javascript - 映射数组并返回 API 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56309626/

相关文章:

javascript - React 中 css 转换的状态更改后元素无法保存

css - 如何在 ReactJS 中将 JSON 传递给 Sass?

javascript - 使用 key 在多个项目之间插入分隔符

javascript - jQuery 获取元素之间的文本

javascript - 如何取回由 knockout 映射绑定(bind)的 knockout 可观察对象

javascript - 计算数组元素并按计数降序排序

javascript - 解决分页问题

reactjs - 在react-admin中成功验证后如何重定向到其他路由?

javascript - 如何在 google chrome DevTools 中禁用某些文件的缓存

Javascript 将参数传递给函数