Fetch / Repo
by Allie Yu
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.1/umd/react-dom.production.min.js"></script>
<div id="root"></div>
Babel + JSX
//Fetch的问题:请求默认不带cookie,需设置fetch(url, {credentials: 'include'})
//服务器返回400,500错误代码时并不会reject,只有网络错误导致请求不能完成时,才会reject
//服务器对就行,路由对不对不管
/*
//GET
fetch(url)
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.log(err))
//POST
fetch(url, {
method: "POST",
body: JSON.stringify(data)
})
.then(data => console.log(data))
.catch(err => console.log(err))
*/
class App extends React.Component{
state = {
isLoading: true,
repoName: '',
repoUrl: '',
errMsg: ''
}
keyWord = 'r'
async componentDidMount() {
const url = `https://api.github.com/search/repositories?q=${this.keyWord}&stroe=stars`
await fetch(url)
//.then(res => res.json())
.then(res => {
if (res.ok) {
return res.json()
} else {
return Promise.reject('服务器正确,路由不存在')
}
}
.then(data => {
//console.log(data)
let repoInfo = data.items[0]
this.setState({
isLoading: false,
repoName: repoInfo.name,
repoUrl: repoInfo.html_url,
errMsg: ''
})
}
.catch(err => {
console.log(err.message); //err.toString()
this.setState({
isLoading: false,
repoName: '',
repoUrl: '',
errMsg: err.toString()
})
})
/* try {
let response = await fetch(url);
console.log(response.data)
let repoInfo = response.data.items[0]
this.setState({
isLoading: false,
repoName: repoInfo.name,
repoUrl: repoInfo.html_url,
errMsg: ''
})
}
catch(err) {
this.setState({
isLoading: false,
repoName: '',
repoUrl: '',
errMsg: err.toString()
})
console.log(err.toString())
} */
}
render() {
let {repoName, repoUrl, errMsg, isLoading} = this.state;
if (isLoading) {
return <h2>Loading...</h2>
} else...