React.js 呈现 json 响应,共同获取或 axios
React.js render json response, co fetch or axios
我的头发拉得太长了,我无法集中注意力了。
我正在尝试从 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=Whosebug');
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=Whosebug')
.then(function(res) {
return res.json();
}).then(function(json) {
console.log(json);
});
我最初是使用axios开始的,因为我认为"oh man, I'm going to use axios because who's awesome? I'm awesome."
axios.get('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=Whosebug')
.then(function(response) {
console.log(response.data);
});
但这是一个谬论,因为今天我并不了不起。
我会竭尽所能!我最初的计划还包括使用 map 来迭代 "items" 所以如果你能引导我更接近那个区域的救赎,那么加分。
您可以通过 React 的组件状态和生命周期来完成此操作。
在这里阅读:React State/Lifecycle
您可以将 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=Whosebug')
.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>
}
}
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=Whosebug";
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>
);
}
}
我的头发拉得太长了,我无法集中注意力了。
我正在尝试从 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=Whosebug');
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=Whosebug')
.then(function(res) {
return res.json();
}).then(function(json) {
console.log(json);
});
我最初是使用axios开始的,因为我认为"oh man, I'm going to use axios because who's awesome? I'm awesome."
axios.get('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=Whosebug')
.then(function(response) {
console.log(response.data);
});
但这是一个谬论,因为今天我并不了不起。
我会竭尽所能!我最初的计划还包括使用 map 来迭代 "items" 所以如果你能引导我更接近那个区域的救赎,那么加分。
您可以通过 React 的组件状态和生命周期来完成此操作。
在这里阅读:React State/Lifecycle
您可以将 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=Whosebug')
.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>
}
}
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=Whosebug";
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>
);
}
}