目錄結構 單頁檔案Records.js
模擬一個mock資料:
1.https://www.mockapi.io/ 可以使用github賬號登陸
2.新建專案
3.我在此命名專案為accunt-app
4.填寫你資料的名字
5.資料的健和型別
6.生成後可調節你想要的條數
7.可以在Data裡預覽資料
8.可在終端裡看請求狀態 API下面的那條url後面加上你的資料名
Records.js中所有內容
先說jquery的ajax:
1.專案中安裝jQuery:yarn add jquery
2.引入 jquery :import $ from 'jquery'
3.建立檢視表格
4.在鉤子函式componentDidMount()中呼叫ajax
5.載入成功失敗,state中isLoaded都是true
6.state中定義error時的狀態,isLoaded載入時的狀態,預設為false,和record初始化資料
成功時將state中的record賦給response資料,就是我們建立的mock資料
7.用if else判斷檢視是否正常載入,獲取錯誤時顯示給使用者的內容,載入時顯示給使用者的內容,成功時展示給使用者正常資料
import React, { Component } from 'react';
//如果只需要用jQuery來獲取後端資料,別的不需要,可以按需匯入,則下面使用時不用加$符號
//import {getJSON} from 'jquery';
//import $ from 'jquery'
import axios from 'axios'
class Records extends Component {
constructor(props) {
super(props);
this.state = {
error:null,
isLoaded:false,
records:[]
}
}
//在鉤子函式中使用jQuery獲取後端資料response成功則返回資料,失敗返回error
componentDidMount(){
axios.get("https://5c407abd2928860014e07025.mockapi.io/api/v1/records")
.then(
response =>this.setState({
records:response.data,
isLoaded:true
}),
).catch(
error =>this.setState({
isLoaded:true,
error:error
}),
)
}
render() {
//相當於將state中的值匯出,類似於const error = this.state.error;
const {error,isLoaded,}=this.state;
if(error){
return <div>
Error:{error.message}
</div>
}else if(!isLoaded){
return <div>
Loading...
</div>
}else {
return (
<div>
<table className="table table-border">
<thead>
<tr>
<th>日期</th>
<th>名稱</th>
<th>金額</th>
</tr>
</thead>
<tbody>
{this.state.records.map((record,i)=>
<tr key={record.id}>
<td>{record.date}</td>
<td>{record.title}</td>
<td>{record.amount}</td>
</tr>
)}
</tbody>
</table>
</div>
);
}
}
}
export default Records;
複製程式碼
axios方法 只需要將axios替換jQuery就可以
1.安裝 npm install axios 或用yarn add axios
2.在需要用到的頁面引入 import axios from 'axios'
3.替換jQuery請求部分 請求成功獲取資料略有不同,一個直接獲取response就是資料,一個要獲取下面的data才能獲取到資料
componentDidMount(){
axios.get("https://5c407abd2928860014e07025.mockapi.io/api/v1/records")
.then(
response =>this.setState({
records:response.data,
isLoaded:true
}),
).catch(
error =>this.setState({
isLoaded:true,
error:error
}),
)
}複製程式碼