当前位置: 首页 > news >正文

前端react 开发 图书列表分页

我最近刚开始使用react 进行 实际的企业项目开发

网文系统

我平常使用vue多 

最近突然猛地一用 react 说实话 多少有点不熟练 所以我现在开始一步一步总结

有一个列表的功能

显示一些图书

大概是这样 目前有一个列表 对接一个接口 然后 接上分页 功能

至于说样式 就慢慢写了

我直接上整个代码了 

import { Button, Card, Space, Image, Pagination, Modal } from 'antd'
import React, { useEffect, useState } from 'react'
import {http// , NumberInputChange 
} from '@/utils'import "./index.scss"
import Operation from 'antd/es/transfer/operation'const BookList = () => {const [list, setBookList] = useState([])const [pageinfo, setPageInfo] = useState({currentPage: 1,pageSize: 10,total: 0})useEffect(() => {getlist()}, [pageinfo.currentPage, pageinfo.pageSize]) // 添加依赖,当const fetchUserList = async () => {return http.post('/api/Works/GetNovelList', {pageIndex: pageinfo.currentPage, // 使用当前页码pageSize: pageinfo.pageSize,     // 使用当前页大小}).then(res => {console.log(res)return res// return res.body.list.map(item => ({//   label: item.groupAlarmName,//   value: item.id,// }))})}const getlist = async () => {const res = await fetchUserList()console.log(res, "获取当前的结果")if (res.code == 200) {setBookList(res.data.infos)setPageInfo(prev => ({...prev,total: res.data.totalCount}))} else {}}const handleBookAction = (e, name) => {console.log(e, name)}// 页码改变const handlePageChange = (page, pageSize) => {console.log('页码改变:', page, '页大小:', pageSize)setPageInfo(prev => ({...prev,currentPage: page,pageSize: pageSize}))// 不要在这里手动调用 getlist(),useEffect 会自动触发}// 页大小改变const handleSizeChange = (current, size) => {console.log('页大小改变:', '当前页:', current, '新大小:', size)setPageInfo(prev => ({...prev,currentPage: 1, // 重要:改变页大小时回到第一页pageSize: size}))}const [isModalOpen, setIsModalOpen] = useState(false)const handleOk = () => {alert("我点击了确定按钮")setIsModalOpen(false)}const handleCancel = () => {setIsModalOpen(false)}const openModal = () => {setIsModalOpen(true)}return (<div style={{ padding: '20px' }}><Card size="small" title="我的作品" extra={<Button onClick={openModal} type='primary'>添加新书</Button>}><div className='book-container'>{list.map((item) => {return <Card key={item.novelID} size='small' style={{ marginBottom: '16px' }} actions={[<Button type="link" onClick={() => handleBookAction(item, 'edit')}>编辑</Button>,<Button type="link" onClick={() => handleBookAction(item, 'chapters')}>章节管理</Button>,<Button type="link" onClick={() => handleBookAction(item, 'publish')}>发布</Button>]}>{/* {item.novelName} */}<div className='item'><Image src={item.coverUrl} width={150} style={{ objectFit: 'widthFix', borderRadius: '8px' }}></Image><div className='content'><div className='text'><div className='name'>{item.novelName}</div><div className='updated'>最近更新:{item.latestUpdateChapter}</div></div><div className='number'><div className='chanpterCount'>{item.totalChapterCount} 章 | </div><div className='wordCount'>{item.totalWordCount} 字 |</div><div className=''>{item.isFinish == 0 ? '连载' : '未完结'}</div></div></div></div></Card>})}{/* <div className='item'></div> */}</div><div className='book-pagination'><PaginationshowSizeChangeronChange={handlePageChange}           // 页码改变onShowSizeChange={handleSizeChange}   // 页大小改变            pageSize={pageinfo.pageSize}total={pageinfo.total}current={pageinfo.currentPage}/></div></Card><Modaltitle="Basic Modal"closable={{ 'aria-label': 'Custom Close Button' }}open={isModalOpen}onOk={handleOk}onCancel={handleCancel}><p>Some contents...</p><p>Some contents...</p><p>Some contents...</p></Modal></div>)}export default BookList

当然这里面使用的是 函数组件 

现在写react 我感觉还是函数组件好使。简单 明了 类组件感觉不太好上手 需要详细查看才行

我这边使用的是ant-design 组件库 对这个react  框架 比较适配 

我这边遇到的问题是 分页组件这里

          <PaginationshowSizeChangeronChange={handlePageChange}           // 页码改变onShowSizeChange={handleSizeChange}   // 页大小改变            pageSize={pageinfo.pageSize}total={pageinfo.total}current={pageinfo.currentPage}/>

当然使用这个 ant-design,跟在vue中不太一样呢 用惯了vue 肯定不太习惯写react

  const [pageinfo, setPageInfo] = useState({currentPage: 1,pageSize: 10,total: 0})

在react 中 这个东西就跟vue 的双向绑定 就不太一样 写法 

 setPageInfo(prev => ({...prev,total: res.data.totalCount}))

赋值方法可定不一样

大家可以慢慢看 我来更新

http://www.dtcms.com/a/610277.html

相关文章:

  • 做vip视频网站赚钱吗最近一周新闻大事件
  • 大数据安全技术实验:Hadoop环境部署
  • 【07】特征匹配算法:ORB算法深度解析与实现
  • vite7更新了哪些内容
  • Aemulo2.0门禁卡复制卡片后修改设置卡片备注名称
  • IP应用场景全图谱:你的IP属于哪一类?
  • 微网站开发 在线商城一键部署wordpress
  • Rust实战:使用Clap和Tokio构建现代CLI应用
  • 中移建设有限公司网站猎头可以做单的网站
  • PostIn V1.3.4版本发布,新增性能测试执行明细,ldap/企业微信/钉钉登录调整为社区版本功能
  • MySQL——表的约束
  • springboot对接xxl-job
  • 企业百度网站建设网络策划是做什么的
  • 网站项目开发流程有哪七步网站素材 按钮
  • Spring Boot 全局异常处理 + 参数校验进阶:让接口告别 “500 报错” 和 “脏数据”
  • Frame structure and physical resources(帧结构与物理资源)
  • 进程状态
  • 做网站ps注意事项个人备案网站可以做电商吗
  • 如何用工控做网站重庆建设安全管理网
  • Java_泛型入门
  • 华为OD机试双机位A卷 - 机器人活动区域 (Python C++ JAVA JS GO)
  • 安卓C语言编译器——高效编程工具,助力开发者提升编程效率
  • 求大神帮忙做网站网站开发收费表
  • 基于uWebSockets开源库实现一个web服务
  • 网站地图后缀WordPress分类中文404错误
  • c 网站做死循环中国建设银行总部网站
  • 力扣(LeetCode)100题:41.缺失的第一个正数
  • 模考倒计时网页版
  • 【IP核 LOCKED】VIVADO IP核锁住的解决办法
  • 关于做网站的pptwordpress录入信息