javascript - 我如何才能对我的项目实施分页
问题描述
所以我最近完成了一个我正在处理的项目,它显示了一个口袋妖怪列表,一旦点击,用户就会被定向到口袋妖怪信息页面。
它看起来如下:
所以我有我的主dashboard.js,其中包含我的“PokemonList”,如下所示:
import React, { Component } from "react";
import styled from "styled-components";
import PokemonList from "../pokemon/PokemonList";
export default class Dashboard extends Component {
render() {
return (
<div>
<div className="row">
<div className="col">
<PokemonList />
</div>
</div>
</div>
);
}
}
我的 PokemonList.js 负责从 PokeAPI 获取 Pokemon 信息,代码如下:
import React, { Component } from "react";
import PokemonCard from "./PokemonCard";
import axios from "axios";
export default class PokemonList extends Component {
state = {
url: "http://pokeapi.co/api/v2/pokemon/?limit=600",
pokemon: null
};
async componentDidMount() {
const res = await axios.get(this.state.url);
this.setState({ pokemon: res.data["results"] });
}
render() {
return (
<React.Fragment>
{this.state.pokemon ? (
<div className="row">
{this.state.pokemon.map(pokemon => (
<PokemonCard
key={pokemon.name}
name={pokemon.name}
url={pokemon.url}
/>
))}
</div>
) : (
<h1>Loading Pokemon</h1>
)}
</React.Fragment>
);
}
}
pokemonList 是由几个 pokemonCards 构建的,然后显示,但我认为我正在寻找的东西不需要编码。
如果我想启用分页,我是否必须将代码合并到我的 Dashboard.js 或 pokemonList.js 中?
- - - - - - - - - - - -编辑 - - - - - - - - - - - - - ------------
解决方案
你可以使用的是这个库:https ://www.npmjs.com/package/react-js-pagination
然后在您的代码中,分页将是这样的:
<Pagination
activePage={this.state.activePage}
itemsCountPerPage={this.state.itemsCountPerPage}
totalItemsCount={this.state.pokemon.length}
pageRangeDisplayed={5}
onChange={::this.handlePageChange.bind(this)}
/>
处理页面更改功能:
handlePageChange(pageNumber) {
this.setState({activePage: pageNumber});
}
然后在你的 pokemonList.js 的渲染函数中:
let indexOfLastTodo = this.state.activePage * this.state.itemsCountPerPage;
let indexOfFirstTodo = indexOfLastTodo - this.state.itemsCountPerPage;
let renderedPokemons = this.state.pokemon.slice(indexOfFirstTodo, indexOfLastTodo);
最后
{renderedPokemons.map(pokemon => (
<PokemonCard
key={pokemon.name}
name={pokemon.name}
url={pokemon.url}
/>
))}
当然不要忘记在您的状态中包含 activePage 和 itemsCountPerPage。我想我在我早期的一个项目中做过类似的事情。享受!
推荐阅读
- javascript - 如何解决 Hooks 上的这个 React 类型错误?
- android - Android HTTP 请求和响应
- python - RuntimeError:视图大小与输入张量的大小和步幅不兼容(至少一个维度跨越两个连续的子空间)
- android - 如何使应用程序无法从 Launcher3 中移除?
- sql - 区分sql语法中的函数名和函数参数
- vb.net - 在 ComboBoxCell.Items 集合中使用 IndexOf 会在不区分大小写的比较中引发异常
- visual-studio-code - 创建我的第一个 ERC721 收藏品系列(VS CODE)//Need Advice
- powershell - 安装模块在哪里
从中获取模块? - entity-framework - Linq .NET 5 中的 DatePart 函数使用可变间隔
- javascript - 重新设计表单/提交/ajax 到 onclick 按钮