【问题标题】:Uncaught (in promise) TypeError: images.map is not a functionUncaught (in promise) TypeError: images.map is not a function
【发布时间】:2020-12-28 18:13:36
【问题描述】:

我正在尝试学习如何使用 axios 从 jsonplaceholder api 获取数据。我试图从 https://jsonplaceholder.typicode.com/v1/photos 获取图像并将其映射到一个 img 元素,但我收到“未捕获(承诺)类型错误:images.map 不是函数”错误。我该如何解决这个错误??

这是我的代码

import axios from "axios";
import React, { useState, useEffect } from "react";
import "./styles.css";

export default function App() {
  const [images, setImages] = useState([]);

  const getData = async () => {
    const { data: images } = await axios(
      "https://jsonplaceholder.typicode.com/photos"
    );
    setImages({ images });
    console.log(images);
  };

  useEffect(() => {
    getData();
  }, []);
  return (
    <div className="App">
      Populate with imagse from jsonplaceholder
      {images.map((image) => {
        return <img src={image.thumbnailUrl} alt={image.title} />;
      })}
    </div>
  );
}

给出的解决方案在 codeSandbox 中有效。 https://codesandbox.io/s/react-json-server-9g7wo?file=/src/VideoCard.js 但是在真正的应用程序中仍然给我“Unhandled Rejection (TypeError): Object(...) is not a function”错误

【问题讨论】:

  • 尝试将 {images.map((image) => 更改为 {images && images.map((image) => ),因为这里发生的事情是在处理您的 axios 请求和图像数组之前当数组为空时,将调用 map 函数。
  • 感谢您的重播。现在我收到“未处理的拒绝(TypeError):Object(...)不是函数”错误
  • 你能告诉我你正在使用的 react 版本吗?
  • 我使用的 react 版本是 17.0.1

标签: reactjs


【解决方案1】:

有了这个:

setImages({ images });

您将images 变量设置为具有一个属性images 的对象,它是一个数组,有点像这样:

const imagesForNextRender = {
  images: [
    /* image data */
  ]
};

但是你不能.map那个。先提取images 属性(不推荐):

images.images.map(

或者,更明智的是,使用数组本身调用setImages,而不是将其包装在一个对象中:

const result = await axios("https://jsonplaceholder.typicode.com/photos");
setImages(result.data);

【讨论】:

  • 感谢重播。我尝试了您的方法,但现在出现“未处理的拒绝(TypeError):对象(...)不是函数”错误。
  • 出现在哪一行?
  • 抱歉重播晚了。我添加了我遇到的错误的屏幕截图。
  • 听起来axios 不是您代码中的函数,并且您没有正确导入它..?确保你在做import axios from "axios";
  • 非常感谢您的帮助。事实证明这是问题所在。我自动导入了 axios,由于某种原因,它是从“axios”导入的 { axios }。这就是错误的原因。再次感谢您的帮助和时间