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

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

表格结构搭建

传送门

ant.design/components/…

  • 删除标签、删除data中的tags、删除年龄一列

完整代码

import React from 'react'
import './less/ListTable.less'
import { Table, Tag, Space } from 'antd';
export default function ListTable() {
  // 真正从后端拿的数据要替换这个data
const data = [
  {
    key: '1',
    name: 'John Brown',
    address: 'New York No. 1 Lake Park',
  },
  {
    key: '2',
    name: 'Jim Green',
    address: 'London No. 1 Lake Park',
  },
  {
    key: '3',
    name: 'Joe Black',
    address: 'Sidney No. 1 Lake Park',
  },
];
// 每一列
const columns = [
  {
    title: 'Name',
    dataIndex: 'name',
    key: 'name',
    render: text => <a>{text}</a>,
  },
  {
    title: 'Age',
    dataIndex: 'age',
    key: 'age',
  },
  {
    title: 'Address',
    dataIndex: 'address',
    key: 'address',
  },
  {
    title: 'Action',
    key: 'action',
    render: (text, record) => (
      <Space size="middle">
        <a>Invite {record.name}</a>
        <a>Delete</a>
      </Space>
    ),
  },
];
  return (
    <div className='list_table'>
    {/* columns列 dataSource数据 */}
       <Table columns={columns} dataSource={data} />
    </div>
  )
}
复制代码


  • 引入button(在Action下面)
// 引入button
import { Table, Button, Space } from 'antd';
//书写button编辑、删除
      <Button type='primary' >编辑</Button>
      <Button type='danger'>删除</Button>
复制代码


9688f9b5145c433d9007397525c7c0e6_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 隐藏表头

0e6fe86ee30e47a3990bc2670e01e889_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 在Table标签是添加showHeader属性
<Table columns={columns} showHeader = {false} dataSource={data} />
复制代码


  • 在columns中删除标题
// 每一列
const columns = [
  {
    dataIndex: 'name',
    key: 'name',
    render: text => <a>{text}</a>,
  },
  {
    dataIndex: 'age',
    key: 'age',
  },
  {
    dataIndex: 'address',
    key: 'address',
  },
  {
    key: 'action',
    render: (text, record) => (
      <Space size="middle">
      <Button type='primary' >编辑</Button>
      <Button type='danger'>删除</Button>
      </Space>
    ),
  },
];
复制代码


  • 显示效果

6c3142c4963b47d69ffa205a466fa4b8_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 渲染标题副标题

在第一列下面修改

5773876363dd4445875244760d120f8d_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


{
    dataIndex: 'name',
    key: 'name',
    render: text => (
      <>
        <h4>标题</h4>
        <p>简直是大家</p>
      </>
    ),
  },
复制代码


a9046910bb3945319d3a22d603355d63_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 渲染时间

在第二列添加渲染

{
    dataIndex: 'address',
    key: 'address',
    render: text => (
      <p>
        2022-03-03 20:33:06
      </p>
      )
  },
复制代码


2b5ecd03e9b1498ab06f5d120a058645_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 改变第一列的宽度

使用width属性

ee57a7f5cd104fd0b035a2dd33003d67_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 修改副标题颜色
{
    dataIndex: 'name',
    key: 'name',
    width:'60%',
    render: text => (
      <>
        <h4>标题</h4>
        <p style={{color:'#999'}}>简直是大家</p>
      </>
    ),
  },
复制代码


在p标签中添加style属性

<p style={{color:'#999'}}>简直是大家</p>
复制代码


  • 实现效果

c00dfe22f9d448fbbad58f978cdb2129_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 修改标题实现跳转

引入Link

import {Link} from 'react-router-dom'
复制代码


修改标签

<Link to="/" className='table_title'>标题</Link>
复制代码


// 标题样式
    .table_title{
        color: #333;
        &:hover {
          color: #1890ff;
        }
      }
复制代码


7fad2fb5b0b94f80891b66df4785343f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 使用useState更新data数据

将原先的data数组传入arr变量中

// 引入useState
import React,{useState} from 'react'
// 初始化
  const [arr,setArr] = useState([
    {
      key: '1',
      name: 'John Brown',
      address: 'New York No. 1 Lake Park',
    }
  ])
// 更改Table标签的属性、dataSource的属性值
<Table columns={columns} showHeader = {false} dataSource={arr} />
复制代码


axios请求格式

get请求必须书写params

axios.get({
    params: {
        num:1
    }
})
axios.post({
    num:1
})
复制代码


  • 书写获取文章的api

api.js文件下

// 获取文章列表
export const ArticleListApi = (params) => request.get('/article', {params})
复制代码


在ListTable.jsx中引入api

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


  • 使用useEffect来请求文章列表
// 引入useEffect
import React,{useState, useEffect} from 'react'
  // 请求文章列表
  useEffect(() => {
    ArticleListApi().then(res=>{
     console.log(res.data)
   })
  }, []);
复制代码


数据处理

  • 解决副标题无法渲染,数组无key值

生成一个新数组,然后map遍历赋值一个新key值

// 请求文章列表
  useEffect(() => {
    ArticleListApi().then(res=>{
      if(res.errCode === 0) {
        let newArr = JSON.parse(JSON.stringify(res.data.arr))
            /* 
                1. 要给每个数组项加key,让key=id
                2. 需要有一套标签结构,赋予一个属性
            */
        newArr.map(item=> {
         item.key = item.id;
         item.mytitle = `
          <>
              <Link to="/" className='table_title'>标题</Link>
              <p style={{color:'#999'}}>简直是大家</p>
          </>
         `;
        })
        console.log(newArr)
      }
   })
  }, []);
复制代码


  • 工作台

0db29e2b50d34b20ad8724c0c441b76a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


列表渲染

  • 使用setArr传入newArr
  • 规范渲染时间date

在第二列将dataIndex、key修改为date

{
    dataIndex: 'date',
    key: 'date',
    render: text => (
      <p>
        {text}
      </p>
      )
  },
复制代码


  • 安装moment

yarn add moment


  • 引入moment
import moment from 'moment'
复制代码


  • 整改date
item.date = moment(item.date).format("YYYY-MM-DD hh:mm:ss")
复制代码


  • 渲染文章标题
item.mytitle = `
  <div>
      <Link to="/" className='table_title'>${item.title}</Link>
      <p style={{color:'#999'}}>${item.subTitle}</p>
  </div>
 `;
  render: text => <div dangerouslySetInnerHTML={{__html:text}}></div>
复制代码


记得修改

dataIndex: 'mytitle',
key: 'mytitle',
复制代码


  • 实现效果

1e8ccc532bb54bc78c822ae0c499c053_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


更换更好的渲染标题的方法

创建一个myArr数组保存对象obj。每次遍历newArr的时候就创建一个obj。通过props属性将获得的标题传递给MyTitle组件。

将mytitle的值改写为MyTitle组件 记得去掉$ 和修改props。

function MyTitle(props) {
  return (
    <div>
        <Link to="/" className='table_title'>{props.title}</Link>
        <p style={{color:'#999'}}>{props.subTitle}</p>
    </div>
  )
}
复制代码


创建对象obj

// 声明一个空数组
   let myarr = []
   newArr.map(item => {
    let obj = {
        key: item.id,
        date: moment(item.date).format("YYYY-MM-DD hh:mm:ss"),
        mytitle: <MyTitle id={item.id} title={item.title} subTitle={item.subTitle} />
    }
    myarr.push(obj)
})
setArr(myarr)
// 注意在对应的列中更改渲染
    render: text =>  <div>{text}</div>
复制代码


  • 实现效果图

27fb7623123947f9a8d3e09e58184e40_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png



目录
相关文章
|
存储 Nacos 微服务
【项目实战典型案例】23.部分服务总是频繁出现掉线情况
【项目实战典型案例】23.部分服务总是频繁出现掉线情况
|
数据库
【自然框架】CMS之数据库设计
    在园子里也混了三年多,随笔200多,一开始只是想把自己的经验写一下,后来呢弄出来了一个“自然框架”,主要精力就放在了介绍自然框架的思路上面了。随笔多了就发现一个问题:有点乱。虽然博客有分组,但是只支持一级分组,不支持n级的。
1592 0
|
3月前
|
监控 小程序 数据处理
揭秘支付宝小程序性能优化秘籍:从加载到运行,每一步都快人一步!
【8月更文挑战第27天】本文深入探讨了支付宝小程序性能优化的关键技术和策略,包括减少网络请求、利用CDN加速、代码按需加载、图片压缩、懒加载以及性能监控等多方面内容,并提供了实用的示例代码,帮助开发者显著提升小程序的加载速度与运行效率,创造更佳用户体验。
70 1
|
6月前
|
Prometheus 监控 Cloud Native
JVM工作原理与实战(三十三):监控GC过程的工具
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了jstat工具、VisualVM插件、Prometheus + Grafana、GC日志等内容。
217 0
|
小程序 数据可视化 数据库
云开发(微信-小程序)笔记(十七)---- cms(内容管理)及案例
云开发(微信-小程序)笔记(十七)---- cms(内容管理)及案例
521 0
【项目实战典型案例】14.课程推送页面整理-增加定时功能
【项目实战典型案例】14.课程推送页面整理-增加定时功能
|
Arthas Oracle Java
58-微服务技术栈(高级):在线检测工具Arthas(jvm相关指令)
开发者对于生产问题故障的排查、定位,随着微服务的喷发,也不再像是以前那边依赖纯日志、gc日志进行问题排查与定位了,本节开始介绍一个生产环境使用的排错工具Arthas,帮助大家更高效、便捷地实现生产问题排错。
362 0
|
存储
《CMS后台系统》项目实战 详细分解(四)
《CMS后台系统》项目实战 详细分解(四)
138 0
《CMS后台系统》项目实战 详细分解(四)
|
存储
《CMS后台系统》项目实战 详细分解(五)
《CMS后台系统》项目实战 详细分解(五)
89 0
《CMS后台系统》项目实战 详细分解(五)
|
存储 API
《CMS后台系统》项目实战 详细分解(十)
《CMS后台系统》项目实战 详细分解(十)
75 0
《CMS后台系统》项目实战 详细分解(十)