javascript - 如何在卡片列表中添加无限滚动?[反应JS]
问题描述
我一直在做一个 pokedex 项目,该项目允许我显示 pokecards 列表。
PokemonList.js 的代码如下
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=200",
pokemon: null,
itemsCountPerPage: 20,
activePage: 1
};
async componentDidMount() {
const res = await axios.get(this.state.url);
this.setState({ pokemon: res.data["results"] });
}
render() {
console.log(this.state.pokemon);
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>
);
}
}
我一直在尝试使用无限滚动插件,例如https://www.npmjs.com/package/react-infinite-scroller,但我似乎从来没有让它工作。我如何应用一次加载 20 张卡片的无限滚动?
解决方案
以下是如何使用此 API 实现无限滚动:
import React, { Component } from "react";
import ReactDOM from "react-dom";
import axios from "axios";
import InfiniteScroll from "react-infinite-scroller";
export default class App extends Component {
state = {
url: "https://pokeapi.co/api/v2/pokemon/?limit=200",
pokemon: [],
itemsCountPerPage: 20,
activePage: 1
};
loadPokemon = () => {
axios
.get(this.state.url)
.then(res => {
this.setState(prevState => {
return {
pokemon: [...prevState.pokemon, ...res.data.results],
url: res.data.next
};
});
})
.catch(function(error) {
// handle error
console.log(error);
});
};
render() {
// console.log(this.state.pokemon);
return (
<React.Fragment>
{this.state.pokemon ? (
<div className="row">
<InfiniteScroll
pageStart={0}
loadMore={this.loadPokemon}
hasMore={this.state.url}
loader={
<div className="loader" key={0}>
Loading ...
</div>
}
>
{this.state.pokemon.map((pokemon, i) => (
<div
style={{ borderBottom: "1px solid", padding: "10px" }}
key={pokemon.name + i}
>
<div>{pokemon.name}</div>
<div>{pokemon.url}</div>
</div>
))}
</InfiniteScroll>
</div>
) : (
<h1>Loading Pokemon</h1>
)}
</React.Fragment>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
您可以在此处的代码沙箱中看到它并运行:
推荐阅读
- oozie - OOZIE workflow.xml 没有函数映射到名称 coord:nominalTime
- python - 运行 python 脚本时,我得到 - 而不是连字符
- linux - QProcess::用 su 命令执行
- javascript - AG-GRID 通过再次单击显示图标关闭迷你过滤器弹出窗口
- bash - 屏幕命令获取不到参数
- kubernetes - helm configmap 在 values.yaml 中包含客户端脚本
- django-filter - 如何使用 django_tables2 在同一个基于类的视图中定义两个或多个表
- mysql - 未能部署 Cloud Data Fusion“将数据从 MySQL 传输到 Google BigQuery”模板管道
- c# - 为来宾获取 Azure AD 令牌
- reactjs - AntD 表自定义过滤器功能不适用于 react 版本 15.4.2