在关注meteor网站上的入门教程后,我停止了“2.4 Create App component”项目,首先安装:
meteor add http
应用程序的目的是以不同方式显示纽约州的彩票api数据。
import React, { Component } from 'react';
import { HTTP } from 'meteor/http';
var apiUrl = 'https://data.ny.gov/api/views/dg63-4siq/rows.json';
export default class App extends Component {
numbers() {
HTTP.get(apiUrl, {}, function(err, res){
if(err){
console.log('ERROR @ CALL');
} else {
console.log(res);
return res.data.data.slice(-50).map((result, index) =>
<li key={ result[0] }>{`${result[8]} - ${result[9]}`}</li>
);
}
});
}
render() {
return (
<div className="container">
<header>
<h1>Numbers</h1>
</header>
<ul>
{ this.numbers() }
</ul>
</div>
);
}
}
来自http调用的对象显示在控制台上但不显示在DOM上
答案 0 :(得分:0)
我不认为在渲染函数中调用函数进行API调用是个好主意,因为每次组件渲染时都会调用它,更好的地方是将它放在componentDidMount函数中,将结果保存在状态中。如果要重复调用,请在setInterval函数中执行此操作,如
export default class App extends Component {
state = {data: []}
componentDidMount() {
var comp = [...this.state.comp]
this.interval = setInterval(()=> {
HTTP.get(apiUrl, {}, function(err, res){
if(err){
console.log('ERROR @ CALL');
} else {
console.log(res);
this.setState({data: res.data.data.slice(-50)})
}
}.bind(this));
}, 2000)
}
componentWillUnmount() {
clearInterval(this.interval)
}
render() {
return (
<div className="container">
<header>
<h1>Numbers</h1>
</header>
<ul>
{this.state.data.map((result, index) =>
<li key={ result[0] }>{`${result[8]} - ${result[9]}`}</li>
); }
</ul>
</div>
);
}
}
答案 1 :(得分:0)
最终代码。
import React, { Component } from 'react';
import { HTTP } from 'meteor/http';
var apiUrl = 'https://data.ny.gov/api/views/dg63-4siq/rows.json';
export default class App extends Component {
constructor(props){
super(props);
this.state = { data : [] };
}
componentDidMount(){
var self = this;
HTTP.get(apiUrl, {}, function(err, res){
if(err){
console.log('ERROR @ CALL');
} else {
self.setState((state, props) => ({
data : res.data.data.slice(-50)
}));
console.log("state equals response");
}
});
}
render() {
return (
<div className="container">
<header>
<h1>Numbers</h1>
</header>
<ul>
{this.state.data.map((result) =>
<li key={ result[0] }>{`${result[8]} - ${result[9].split(' ')}`}</li>
)}
</ul>
</div>
);
}
}