《CMS后台系统》项目实战 详细分解(九)

简介: 《CMS后台系统》项目实战 详细分解(九)

列表组件引入

  • 借用ListTable的css样式

直接在div盒子上添加对应属性

<div className='list_table'>ListList</div>
复制代码


列表传送门

ant.design/components/…

  • 复制对应代码
itemLayout="horizontal"
        loadMore={loadMore}
        dataSource={list}
        renderItem={item => (
          <List.Item
            actions={[<a key="list-loadmore-edit">edit</a>, <a key="list-loadmore-more">more</a>]}
          >
            <Skeleton avatar title={false} loading={item.loading} active>
              <List.Item.Meta
                avatar={<Avatar src={item.picture.large} />}
                title={<a href="https://ant.design">{item.name.last}</a>}
                description="Ant Design, a design language for background applications, is refined by Ant UED Team"
              />
              <div>content</div>
            </Skeleton>
          </List.Item>
        )}
      />
    </div>
复制代码


修改代码

  • 使用useState
// 引入useState
import React,{useState} from 'react'
将List转换就行其余删掉
const [list, setList] = useState([])
复制代码


删除 fakeDataUrl 、count

删除List中的initLoading、loadMore、 avatar

微信截图_20221112085628.png


微信截图_20221112085658.png


  • 最后代码
import React,{useState} from 'react'
import { List,Skeleton } from 'antd';
export default function ListList() {
  const [list, setList] = useState([])
  return (
    <div className='list_table'>
        <List
        className="demo-loadmore-list"
        itemLayout="horizontal"
        dataSource={list}
        renderItem={item => (
          <List.Item
            actions={[<a key="list-loadmore-edit">edit</a>, <a key="list-loadmore-more">more</a>]}
          >
            <Skeleton  title={true} loading={item.loading} active>
              <List.Item.Meta
                title={<a href="!#">标题</a>}
                description="副标题"
              />
              <div>日期</div>
            </Skeleton>
          </List.Item>
        )}
      />
    </div>
  )
}
复制代码


实现效果

微信截图_20221112085841.png


使用useEffect发送请求

// 引入useEffect
import React,{useState,useEffect} from 'react'
// 引入api
import { ArticleListApi } from '../request/api';
复制代码


// 请求列表数据
  useEffect(()=>{
      ArticleListApi().then(res=>{
        console.log(res.data.arr)
        if(res.errCode === 0) {
          let {arr,total,num,count} = res.data;
          setList(arr)
        }
      })
  },[])
复制代码


  • 渲染数据
<Skeleton  loading={false}>
              <List.Item.Meta
                title={<a href="!#">{item.title}</a>}
                description={item.subTitle}
              />
              <div>{item.date}</div>
            </Skeleton>
复制代码


  • 实现效果

微信截图_20221112085905.png


  • 将标题挤开部分
style={{ padding: '20px' }}
复制代码

微信截图_20221112085931.png


  • 设置分页

引入分页

import { List,Skeleton,Pagination } from 'antd';
复制代码


使用API

<Pagination onChange={onChange} total={50} />
复制代码

微信截图_20221112085952.png


书写onChange事件

// 分页
    const onChange = (pages) => {
      console.log(pages)
    }
复制代码


使用useState设置total、current、pageSize

const [total, setTotal] = useState(0)
  const [current, setCurrent] = useState(1)
  const [pageSize, setPageSize] = useState(10)
复制代码


在Pagination中可以直接使用total、current、pageSize

<Pagination onChange={onChange} total={50} total={total} current={current} pageSize={pageSize} />
复制代码


请求更新total、current、pageSize

// 请求列表数据
  useEffect(()=>{
      ArticleListApi({
        num: current,
        count: pageSize
      }).then(res=>{
        console.log(res.data.arr)
        if(res.errCode === 0) {
          let {arr,total,num,count} = res.data;
          setList(arr);
          setTotal(total);
          setCurrent(num);
          setPageSize(count)
        }
      })
  },[])
复制代码


  • 请求封装
// 请求封装
  const getList = (num) => {
    ArticleListApi({
      num: num,
      count: pageSize
    }).then(res=>{
      console.log(res.data.arr)
      if(res.errCode === 0) {
        let {arr,total,num,count} = res.data;
        setList(arr);
        setTotal(total);
        setCurrent(num);
        setPageSize(count)
      }
    })
  }
复制代码


  • 书写点击事件
// 分页
  const onChange = (pages) => {
    getList(pages);
  }
复制代码


将分页按钮书写到右边

style={{float: 'right',marginTop: '20px'}}
复制代码


日期域按钮

日期

// 引入moment
import moment from 'moment'
//规范时间
<div>{moment(item.date).format("YYYY-MM-DD hh:mm:ss")}</div>
复制代码


按钮

// 引入button
import { ArticleListApi } from '../request/api';
复制代码


actions={[
    <Button type='primary' onClick={()=>console.log(item.id)}>编辑</Button>, 
    <Button type='danger' onClick={()=>console.log(item.id)}>删除</Button>
  ]}
复制代码


微信截图_20221112090029.png



目录
相关文章
|
6月前
|
监控 NoSQL Java
十八张图带你入门实时监控系统HertzBeat
我们经常讲:研发人员有两只眼睛,一只是监控平台,另一只是日志平台。在对性能和高可用讲究的场景里,监控平台的重要性再怎么强调也不过分。 这篇文章,我们聊聊开源实时监控告警系统 HertzBeat 赫兹跳动。
十八张图带你入门实时监控系统HertzBeat
|
6月前
|
架构师 Java
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
jvm性能调优实战 - 35电商APP后台系统如何对Full GC进行深度优化
98 0
|
数据库
【自然框架】CMS之数据库设计
    在园子里也混了三年多,随笔200多,一开始只是想把自己的经验写一下,后来呢弄出来了一个“自然框架”,主要精力就放在了介绍自然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,但是只支持一级分组,不支持n级的。
1593 0
|
3月前
|
监控 小程序 数据处理
揭秘支付宝小程序性能优化秘籍:从加载到运行,每一步都快人一步!
【8月更文挑战第27天】本文深入探讨了支付宝小程序性能优化的关键技术和策略,包括减少网络请求、利用CDN加速、代码按需加载、图片压缩、懒加载以及性能监控等多方面内容,并提供了实用的示例代码,帮助开发者显著提升小程序的加载速度与运行效率,创造更佳用户体验。
79 1
|
6月前
|
Prometheus 监控 Cloud Native
JVM工作原理与实战(三十三):监控GC过程的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了jstat工具、VisualVM插件、Prometheus + Grafana、GC日志等内容。
228 0
|
6月前
|
Arthas Prometheus 监控
JVM工作原理与实战(二十九):监控内存泄漏的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了解决内存溢出的步骤、Top命令、VisualVM、Arthas、Prometheus + Grafana等内容。
405 0
|
小程序 数据可视化 数据库
云开发(微信-小程序)笔记(十七)---- cms(内容管理)及案例
云开发(微信-小程序)笔记(十七)---- cms(内容管理)及案例
527 0
|
存储 Java 对象存储
JavaWeb第八章课后题 会话跟踪
JavaWeb第八章课后题 会话跟踪
137 0
|
资源调度 API 数据处理
《CMS后台系统》项目实战 详细分解(七)
《CMS后台系统》项目实战 详细分解(七)
115 0
《CMS后台系统》项目实战 详细分解(七)
|
存储 API
《CMS后台系统》项目实战 详细分解(十)
《CMS后台系统》项目实战 详细分解(十)
75 0
《CMS后台系统》项目实战 详细分解(十)