【问题标题】:React not reading json returned from flask GET endpoint反应不读取从烧瓶 GET 端点返回的 json
【发布时间】:2020-04-01 13:48:59
【问题描述】:

我正在尝试获取从 url 返回的数据。卷曲到 url 结果如下:

[{"name": "Hello World!"}]

以下是我的 App.js 中的代码


import React, { Component } from 'react';
import Contacts from './components/contacts';


class App extends Component {
  render() {
    return (
      <Contacts contacts={this.state.contacts} />
  )
  }
  state = {
    contacts: []
  };

  componentDidMount() {
    fetch('url')
    .then(res => res.json())
    .then((data) => {
      this.setState({ contacts: data })
    })
    .catch(console.log)
  }

}

export default App;

我的contact.js 包含以下内容:

// src/components/contacts.js

import React from 'react'

const Contacts = ({ contacts }) => {
    return (
    <div>
        <center><h1>Contact List</h1></center>
        {contacts.map((contact) => (
        <div class="card">
            <div class="card-body">
            <h5 class="card-title">{contact.name}</h5>
            </div>
        </div>
        ))}
    </div>
    )
};

export default Contacts

数据不会被渲染或记录。我获取它的方式有问题吗?

编辑:该问题与 CORS 有关。不知道为什么使用 flask_cors 不能解决它。我的服务器看起来像:

from flask import Flask, request, json
from flask_cors import CORS, cross_origin

app = Flask(__name__)
CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'

@app.route("/")
def home():
    return json_response([{"name":"Hello World!"}])

def json_response(payload, status=200):
     return (json.dumps(payload), status, {'content-type': 'application/json'})

【问题讨论】:

  • 你的代码看起来不错..你有什么问题
  • 数据没有显示在网页上。它应该显示“Hello World”
  • 我用不同的api发布了你的代码,你可以检查一下
  • 你能把网络标签的图片贴出来吗?响应头和预览标签?

标签: python json reactjs flask


【解决方案1】:

您可以使用 dummy api 检查您的代码示例,并且您的代码运行良好。

唯一不同的就是 api

    class App extends React.Component {
      state = {
        contacts: []
      };
      render() {
        return (
          <Contacts contacts={this.state.contacts} />
      )
      }
      componentDidMount() {
        fetch(`https://cors-anywhere.herokuapp.com/http://35.222.96.248:5000/`)
        .then(res => res.json())
        .then(data => {
        this.setState({ contacts: data });
      })
      .catch(console.log);
  }
    }
    const Contacts = ({ contacts }) => {
        return (
        <div>
            <center><h1>Contact List</h1></center>
            {contacts.map((contact) => (
            <div class="card">
                <div class="card-body">
                <h5 class="card-title">{contact.title}</h5>
                </div>
            </div>
            ))}
        </div>
        )
    };

Live Demo

【讨论】:

  • 我也是这样。这行得通,但是如果我将网址更改为我想要的网址,它就不起作用。我的网址的回复有什么问题吗?我已将其包含在我的帖子中
  • @SrishtiRawal 你的前端没有问题。问题出在你的 api 上,检查一下
  • 我用curl查看了api的响应,好像是正确的
  • @SrishtiRawal 我已经向您展示了您的前端代码,您的代码很好。你需要从邮递员或其他东西调试/测试你的 api
  • 邮递员返回: [ { "name": "Hello World!" } ]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
相关资源
最近更新 更多