基于页外拼接数据
Splice data based off page
import React,{Component} from 'react';
import Pagination from "@material-ui/lab/Pagination";
import axios from 'axios';
class Limit extends Component {
constructor(props) {
super(props)
this.state = {
api: [''],
perPage:2,
currentPage:1,
totalPage:0
}
}
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const start = this.state.currentPage* this.state.perPage - this.state.perPage;
const end = start + this.state.perPage;
const api = res.data.splice(start,end)
this.setState({api});
this.setState({totalPage:res.data.length/this.state.perPage})
})
}
handleChange = (value) => {
this.setState({currentPage: value});
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const start = this.state.currentPage* this.state.perPage - this.state.perPage;
const end = start + this.state.perPage;
const api = res.data.splice(start,end)
this.setState({api});
})
};
render()
{
return (
<><ul>
{this.state.api
.map(person => <li key={person.id}>{person.name}</li>
)}
</ul><Pagination count={this.state.totalPage} page={this.state.currentPage} onChange={this.handleChange.bind(this)} /></>
);
}
}
export default Limit
它似乎在开始时显示了我想要的 2 个 api 值,但总页数已关闭,应该是 5,句柄更改没有获得更多数据。当打印出 handlechange 中的值时,我得到的是对象而不是值。
当您使用 splice 时,您正在修改原始数组本身。最初 api 数据有 10 个元素。当您对 api 数据执行拼接操作时,您删除了 2 个元素,现在 api 数据中的总元素为 8。然后您计算 api 数据的总页数为 8 / 2 = 4
.
您可以通过在拼接 api 数据数组之前计算总页数来解决此问题。
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`).then((res) => {
const start =
this.state.currentPage * this.state.perPage - this.state.perPage;
const end = start + this.state.perPage;
const totalPage = res.data.length / this.state.perPage;
const api = res.data.splice(start, end);
this.setState({ api, totalPage });
});
}
此外,这不是实现分页的好方法,因为当您只需要 1 页数据时,您正在获取 5 页的数据。您可以使用 api url.
中的查询参数仅获取当前页面数据
例如:https://jsonplaceholder.typicode.com/users?_page=0&_limit=2
上面url只会给你当前页面的元素,你不需要做拼接操作和额外的工作。
import React,{Component} from 'react';
import Pagination from "@material-ui/lab/Pagination";
import axios from 'axios';
class Limit extends Component {
constructor(props) {
super(props)
this.state = {
api: [''],
perPage:2,
currentPage:1,
totalPage:0
}
}
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const start = this.state.currentPage* this.state.perPage - this.state.perPage;
const end = start + this.state.perPage;
const api = res.data.splice(start,end)
this.setState({api});
this.setState({totalPage:res.data.length/this.state.perPage})
})
}
handleChange = (value) => {
this.setState({currentPage: value});
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
const start = this.state.currentPage* this.state.perPage - this.state.perPage;
const end = start + this.state.perPage;
const api = res.data.splice(start,end)
this.setState({api});
})
};
render()
{
return (
<><ul>
{this.state.api
.map(person => <li key={person.id}>{person.name}</li>
)}
</ul><Pagination count={this.state.totalPage} page={this.state.currentPage} onChange={this.handleChange.bind(this)} /></>
);
}
}
export default Limit
它似乎在开始时显示了我想要的 2 个 api 值,但总页数已关闭,应该是 5,句柄更改没有获得更多数据。当打印出 handlechange 中的值时,我得到的是对象而不是值。
当您使用 splice 时,您正在修改原始数组本身。最初 api 数据有 10 个元素。当您对 api 数据执行拼接操作时,您删除了 2 个元素,现在 api 数据中的总元素为 8。然后您计算 api 数据的总页数为 8 / 2 = 4
.
您可以通过在拼接 api 数据数组之前计算总页数来解决此问题。
componentDidMount() {
axios.get(`https://jsonplaceholder.typicode.com/users`).then((res) => {
const start =
this.state.currentPage * this.state.perPage - this.state.perPage;
const end = start + this.state.perPage;
const totalPage = res.data.length / this.state.perPage;
const api = res.data.splice(start, end);
this.setState({ api, totalPage });
});
}
此外,这不是实现分页的好方法,因为当您只需要 1 页数据时,您正在获取 5 页的数据。您可以使用 api url.
中的查询参数仅获取当前页面数据例如:https://jsonplaceholder.typicode.com/users?_page=0&_limit=2
上面url只会给你当前页面的元素,你不需要做拼接操作和额外的工作。