React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据时可以将数据存储在 state 中,再用 this.setState 方法重新渲染 UI。
当使用异步加载数据时,在组件卸载前使用 componentWillUnmount 来取消未完成的请求。
下面这个案例用到了jQuery,所以安装jQuery先
npm i jquery -S
引入jQuery
import $ from 'jquery'
import React, { Component,Fragment } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import $ from 'jquery';
class User extends Component{
constructor(props){
super(props);
this.state={
username:'',
userUrl:''
}
}
//组件挂载完成后
componentDidMount(){
this.myAjax=$.get(this.props.source,res=>{
var lastGist=res[0];
console.log(lastGist);
this.setState({
username:lastGist.owner.login,
userUrl:lastGist.html_url
})
})
}
//组件将要卸载前
componentWillUnmount(){
//取消未完成的请求
this.myAjax.abort();
}
render(){
return(
<Fragment>
<div>用户账号:{this.state.username}</div>
<a href={this.state.userUrl}>用户网址:{this.state.userUrl}</a>
</Fragment>
)
}
}
ReactDOM.render(
<div>
<User source="https://api.github.com/users/octocat/gists" />
</div>,
document.getElementById('example')
);
serviceWorker.unregister();

可以使用之前知识列出所有条目
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import $ from 'jquery';
class User extends Component{
constructor(props){
super(props);
this.state={
username:[],
userUrl:[]
}
}
//组件挂载完成后
componentDidMount(){
this.myAjax=$.get(this.props.source,res=>{
var lastGist=res;
var usernames=[];
var userUrls=[];
lastGist.map(
function proc(item){
usernames.push(item.owner.login);
userUrls.push(item.html_url);
return item;
}
)
this.setState({
username:usernames,
userUrl:userUrls
})
})
}
//组件将要卸载前
componentWillUnmount(){
//取消未完成的请求
this.myAjax.abort();
}
render(){
var names=this.state.username;
var urls=this.state.userUrl;
return(
<ul>
{
names.map(
function(item,index){
return(
<div key={index}>
<li>{item}</li>
<a href={urls[index]} rel="nofollow">{urls[index]}</a>
</div>
)
}
)
}
</ul>
)
}
}
ReactDOM.render(
<div>
<User source="https://api.github.com/users/octocat/gists" />
</div>,
document.getElementById('example')
);
serviceWorker.unregister();
