首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法读取未定义的属性'map‘(正在尝试从API获取)

无法读取未定义的属性'map‘(正在尝试从API获取)
EN

Stack Overflow用户
提问于 2021-06-12 05:06:32
回答 1查看 38关注 0票数 0

我对ReactJS和API抓取这件事是相当陌生的,我已经被这个错误困扰了很长一段时间,所以我想知道是否有人知道问题是什么:P

我正在尝试获取一个json文件,然后从中提取一些数据。API是https://hytale.com/api/blog/post/published,但是他们没有启用CORS,所以我尝试使用一个名为allorigins的CORS代理。谢谢!

代码:

代码语言:javascript
运行
复制
import React from "react";
import BlogPost from "./BlogPost";

class BlogPosts extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      posts: [],
    };
  }

  componentDidMount() {
    fetch(
      `https://api.allorigins.win/raw?url=https://hytale.com/api/blog/post/published`
    )
      .then((response) => {
        if (response.ok) {
          console.log(response);
          response.json();
          console.log("Blogposts fetched PHASE 1!");
        }
      })
      .then((jsonData) => {
        this.setState({ posts: jsonData });
        console.log(this.state.posts);
        console.log(jsonData);
        console.log("Blogposts fetched PHASE 2!");
      });
  }

  render() {
      return (
        <div className="bg-gray-100 py-5 px-8 rounded-xl w-auto my-8 shadow-lg">
          <div className="text-3xl font-semibold">
            Latest BlogPosts or Announcements
          </div>
          <span className="inline-block my-3 mr-2 bg-green-100 px-3 py-1 rounded-2xl text-green-700">
            <b className="text-green-800">0</b> new blogposts in the last month.
          </span>
          <br />
          <p className="font-semibold text-xl mb-5 text-gray-700">
            Check out the latest 5 blogposts here:
          </p>

          {this.state.posts === null ? (
            <span className="text-gray-400 font-semibold text-lg">
              Loading BlogPosts...
            </span>
          ) : (
            this.state.posts.map((post) => {
              return <BlogPost
                name={post.title}
                date={post.publishedAt}
                author={post.author}
                type={post.coverImage.contentType}
                image={
                  "https://cdn.hytale.com/variants/blog_thumb_" + post.coverImage.s3Key
                }
                text={post.bodyExcerpt}
                link="https://hytale.com/news/2020/12/december-2020-development-update"
              />
              })
          )}
        </div>
      );
  }
}

export default BlogPosts;
EN

回答 1

Stack Overflow用户

发布于 2021-06-12 05:15:05

您需要从第一个then()回调中返回JSON。

代码语言:javascript
运行
复制
.then((response) => {
  if (response.ok) {
    return response.json();
  }
})

如果不这样做,将导致在下一个回调中未定义jsonData

MDN文档有一个很好的简单示例来获取JSON here。它们使用隐式返回来表示更短的语法,但它们返回的是.json()调用的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67943472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档