4

我已经把头发拉得太长了,我再也无法集中注意力了。

我正在尝试从 url 中获取 json,然后在浏览器中直观地呈现它。它甚至不需要格式化,至少在我克服这个障碍之前不需要。

我可以通过console.log 让它显示在控制台中,但我似乎无法得到渲染方法的响应。我已将其简化为下面的代码,直到我可以在页面上看到某些内容。

import React, { Component } from 'react';
// import axios from 'axios';

var co = require('co');
co(function *() {
var res = yield fetch('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=stackoverflow');
var json = yield res.json();
console.log(res);
});

class App extends Component {

render() {
return (
  <div className="App">
    INSERT JSON HERE
  </div>
  );
 }
}

export default App;

我还使用检索了响应

fetch('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=stackoverflow')
    .then(function(res) {
        return res.json();
    }).then(function(json) {
        console.log(json);
    });

我最初使用 axios 是因为我想“哦,伙计,我要使用 axios 因为谁很棒?我很棒”。

axios.get('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=stackoverflow')
  .then(function(response) {
    console.log(response.data);
  });

但这是错误的,因为今天我并不出色。

我会尽我所能得到的帮助!我最初的计划还包括使用 map 来迭代“项目”,如果你能引导我更接近那个领域的救赎,那么可以加分。

4

2 回答 2

5
import React, { Component } from "react";
import axios from "axios";

const URL = "https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=stackoverflow";

export default class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      items: []
    }
  }

  componentDidMount() {
    var _this = this;
    axios.get(URL)
    .then(function(res){
      _this.setState({
        items: res.data.items
      });
    })
    .catch(function(e) {
      console.log("ERROR ", e);
    })
  }

  render() {
    const renderItems = this.state.items.map(function(item, i) {
      return <li key={i}>{item.title}</li>
    });

    return (
      <ul className="App">
        {renderItems}
      </ul>
    );
  }
}
于 2017-05-01T00:47:43.840 回答
3

您可以通过 React 的组件状态和生命周期来完成此操作。

在这里阅读:反应状态/生命周期

您可以将 Fetch 调用放在组件的 componentDidMount 函数中,并让回调设置查看状态。

如果您要使用 Fetch,您的组件可能如下所示:

class App extends Component {
 constructor(props) {
  super(props);
  this.state = {
   data: false
  };
  this.receiveData = this.receiveData.bind(this);
 }
 componentDidMount() {
  var _self = this;
  fetch('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=stackoverflow')
  .then(function(res) {
     return res.json();
  }).then(function(json) {
     console.log(json);
     _self.receiveData(json);
  });
 }
 receiveData(data) {
  this.setState({data});
 }
 render() {
  return <div>{this.state.data}</div>
 }
}
于 2017-04-30T23:36:29.727 回答