我從這兩個在線 API 中獲取資料,第一個 api 是隨機組織的,第二個 api 是排名組織的,當兩個 api 放在一起時的資料結果我得到API#2 POSITION, API#1 NAME, API#2 POINTS 但是由API#1隨機組織。
[1]
我如何排序()。映射我的代碼,以便表格上的結果按 1、2、3 等排名組織
代碼:
import axios from "axios";
import React, { useState, useEffect } from "react";
import Pagination from "https://cdn.skypack.dev/[email protected]";
const News = () => {
const [playerName, setPlayerName] = useState([]);
const [playerRank, setPlayerRank] = useState([]);
const [player, setPlayer] = useState([]);
const [perPage, setPerPage] = useState(10);
const [size, setSize] = useState(perPage);
const [current, setCurrent] = useState(1);
const [players, setPlayers] = useState();
const fetchData = () => {
const playerAPI = 'http://localhost:3008/api/players';
const playerRank = 'http://localhost:3008/api/highscore/players';
const getINFOPlayer = axios.get(playerAPI)
const getPlayerRank = axios.get(playerRank)
axios.all([getINFOPlayer, getPlayerRank]).then(
axios.spread((...allData) => {
const allDataPlayer = allData[0].data.players
const getINFOPlayerRank = allData[1].data.players
const newPlayer = allDataPlayer.map(name => {
const pr = getINFOPlayerRank.find(rank => name.id === rank.id)
return {
id: name.id,
name: name.name,
status: name.status,
position: pr?.position,
score: pr?.score
}
// or simply do the following if the keys doesn't matter: return {...name, ...pr}
})
setPlayerName(allDataPlayer)
setPlayerRank(getINFOPlayerRank)
console.log(newPlayer)
setPlayer(newPlayer)
})
)
}
useEffect(() => {
fetchData()
}, [])
const PerPageChange = (value) => {
setSize(value);
const newPerPage = Math.ceil(players.length / value);
if (current > newPerPage) {
setCurrent(newPerPage);
}
}
const getData = (current, pageSize) => {
// Normally you should get the data from the server
return player?.slice((current - 1) * pageSize, current * pageSize);
};
const sortData = getData && player?.sort((a, b) => a.position > b.position ? 1 : -1)
const PaginationChange = (page, pageSize) => {
setCurrent(page);
setSize(pageSize)
}
const PrevNextArrow = (current, type, originalElement) => {
if (type === 'prev') {
return <button><i className="fa fa-angle-double-left"></i></button>;
}
if (type === 'next') {
return <button><i className="fa fa-angle-double-right"></i></button>;
}
return originalElement;
}
return (
<>
<div className="container-fluid mt-5 mb-5">
<div className="row justify-content-center">
<div className="col-md-10">
<div className="card">
<div className="card-body p-0">
<div className="table-filter-info">
<Pagination
className="pagination-data"
showTotal={(total, range) => `Showing ${range[0]}-${range[1]} of ${total}`}
onChange={PaginationChange}
total={player.length}
current={current}
pageSize={size}
showSizeChanger={false}
itemRender={PrevNextArrow}
onShowSizeChange={PerPageChange}
/>
</div>
<div className="table-responsive">
<table className="table table-text-small mb-0">
<thead className="thead-primary table-sorting">
<tr>
<th>#</th>
<th>Name</th>
<th>Points</th>
<th>Alliance</th>
<th>Status</th>
</tr>
</thead>
<tbody>
{getData(current, size)
.map((player) => {
return (
<tr key={player.name}>
<td>{player.position}</td>
<td>{player.name}</td>
<td>{player.score}</td>
<td>{player.alliance}</td>
<td>{player.status}</td>
</tr>
);
})}
</tbody>
</table>
</div>
<div className="table-filter-info">
<Pagination
className="pagination-data"
showTotal={(total, range) => `Showing ${range[0]}-${range[1]} of ${total}`}
onChange={PaginationChange}
total={player.length}
current={current}
pageSize={size}
showSizeChanger={false}
itemRender={PrevNextArrow}
onShowSizeChange={PerPageChange}
/>
</div>
</div>
</div>
</div>
</div>
</div>
</>
)
}
export default News
uj5u.com熱心網友回復:
在 ReactJS 中對任何資料進行排序只需使用以下代碼-
const sortData = apiData && apiData.sort((a, b) => a.name > b.name ? 1 : -1)
在上面的代碼中,ApiData 是排序的,您可以使用獲取資料的常量名稱來更改它。在此使用排序方法之后,只需呼叫 a 和 b 之類的兩個值,然后比較它們并回傳結果。您還可以使用pr?.position更改 a.name 以對 API 結果進行排序。
希望你會喜歡這個例子并解決你的問題。如果您仍然面臨問題,請讓我知道,我會為您提供更多幫助。謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/525304.html
