React 列表页实现

news/2025/2/11 21:50:08/

一、介绍

        列表页是常用的功能,从后端获取列表数据,刷新到页面上。开发列表页需要考虑以下技术要点:1.如何翻页;2.如何进行内容搜索;3.如何缓存数据;4.何时进行页面刷新。

二、使用教程

1.redux

actions.js

export function fetchList(page = 1, keyword = "", pageSize = 3) {// actionreturn dispatch => {// 开始加载列表dispatch({type: "FETCH_LIST_BEGIN",});const promise = new Promise((resolve, reject) => {const doRequest = axios.get(`https://reqres.in/api/users?page=${page}&per_page=${pageSize}&q=${keyword}`,);doRequest.then(res => {// 加载列表成功dispatch({type: "FETCH_LIST_SUCCESS",data: {items: res.data.data,page,pageSize,total: res.data.total,},});resolve(res);},err => {// 加载列表失败dispatch({type: "FETCH_LIST_ERROR",data: { error: err },});reject(err);},);});return promise;};
}

reducer.js

const initialState = {items: [],page: 1,pageSize: 3,total: 0,fetchListPending: false,fetchListError: null,listNeedReload: false,
};
// reducer
export default (state = initialState, action) => {switch (action.type) {case "FETCH_LIST_BEGIN":return {...state,fetchListPending: true,fetchListError: null,};case "FETCH_LIST_SUCCESS": {const byId = {};const items = [];action.data.items.forEach(item => {items.push(item);});return {...state,items,page: action.data.page,pageSize: action.data.pageSize,total: action.data.total,fetchListPending: false,fetchListError: null,};}case "FETCH_LIST_ERROR":return {...state,fetchListPending: false,fetchListError: action.data,};break;default:break;}return state;
};

2.demo

export const ListPage = () =>{const [search, setSearch] = useState('');const [state, dispatch] = useReducer(reducer, initialState);const {page, total, pageSize,keyword,  items, fetchListPending} = stateconst getColumns = () => {return [{title: "First Name",dataIndex: "first_name",render: (firstName, rec) => (<Link to={`/user/${rec.id}`}>{firstName}</Link>),}];}handleSearch = keyword => {fetchList(page, pageSize, keyword)(dispatch);};const dataSourceSelector = createSelector(getItems, getById, (items) => {console.log("reselect: get data source");if (!items) return [];return items          });return (<><div><h2>User List</h2><Input.Searchvalue={search}onChange={e => setSearch( e.target.value )}style={{ width: "200px" }}onSearch=handleSearch}/><TabledataSource={dataSourceSelector(state)}columns={getColumns()}style={{ width: "400px" }}rowKey="id"loading={fetchListPending}pagination={false}/><Paginationcurrent={page}total={total}pageSize={pageSize}/></div></>);}


http://www.ppmy.cn/news/1259778.html

相关文章

数据结构与算法之美学习笔记:32 | 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?

标题 前言BF 算法RK 算法解答开篇 & 内容小结 前言 本节课程思维导图&#xff1a; 从今天开始&#xff0c;我们来学习字符串匹配算法。我们用的最多的比如 Java 中的 indexOf()&#xff0c;Python 中的 find() 函数等&#xff0c;它们底层就是依赖接下来要讲的字符串匹配算…

Ubuntu22.04通过Maas和Juju部署openstack charm

目录 官方文档材料准备软件硬件 模板机和虚拟网络安装MAAS官方文档MAAS节点配置安装MAAS浏览器登录MAAS进行配置 激活DHCP 官方文档 https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/ 这是一个通过Maas面板即可部署openstack的方式&#xff0…

windows10系统下替换、修改jar中的文件并重新打包成jar文件然后运行

目录 1、jar文件简述2、问题来源3、操作步骤3.1 解压jar包3.2 替换或者更改操作3.3 重新打成jar包3.4 确认是否修改成功3.5 运行程序 附录&#xff1a;常见命令参数 1、jar文件简述 JAR 文件就是 Java Archive &#xff08; Java 档案文件&#xff09;&#xff0c;它是 Java 的…

[JavaScript前端开发及实例教程]计算器井字棋游戏的实现

计算器&#xff08;网页内实现效果&#xff09; HTML部分 <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>My Calculator&l…

ELK的日志解决方案

ELK的日志解决方案 ELK是什么 ELK 是一个缩写&#xff0c;代表 Elastic Stack&#xff0c;而不是三个独立的产品名称。Elastic Stack 是一个开源的数据处理和分析平台&#xff0c;用于实时搜索、分析和可视化大规模数据。ELK 是由三个主要的组件构成&#xff1a; Elasticsea…

一篇文章带你详细了解C++智能指针

一篇文章带你详细了解C智能指针 为什么要有智能指针内存泄漏1.什么是内存泄漏&#xff0c;它的危害是什么2.内存泄漏的分类3.如何避免内存泄漏 智能指针的使用及原理1.RAII2.智能指针的原理3.auto_ptr4.unique_ptr5.shared_ptr6.weak_ptr 为什么要有智能指针 C引入智能指针的主…

App的测试,和传统软件测试有哪些区别?应该增加哪些方面的测试用例?

从上图可知&#xff0c;测试人员所测项目占比中&#xff0c;App测试占比是最高的。 这就意味着学习期间&#xff0c;我们要花最多的精力去学App的各类测试。也意味着我们找工作前&#xff0c;就得知道&#xff0c;App的测试点是什么&#xff0c;App功能我们得会测试&#xff0…

ssl下载根证书和中间证书

为了保证客户端和服务端通过HTTPS成功通信&#xff0c;您在安装SSL证书时&#xff0c;也需要安装根证书和中间证书。本文介绍如何获取根证书和中间证书。 使用说明 如果您的业务用户通过浏览器访问您的Web业务&#xff0c;则您无需关注根证书和中间证书&#xff0c;因为根证书…