React antd table 基础用法笔记1

设置表头

通过columns数组,给表格配置表头信息:

columns配置数组中每个元素都是对象,每个对象是table中某一列的表头配置。

常用配置参数

dataIndex 指定列数据在表格的内容数据对象数组(dataSource)中的字段名。

key 指定给React用的key值

title 列名(表头名)

align 列名(表头名)在格内的对齐方式

fixed 该列是否固定在整个表格最左或最右端

width 列宽度

简单例子:

javascript 复制代码
import { Table } from 'antd'
import type { TableColumnsType } from 'antd';
  

const columns: TableColumnsType<any> = [
  {
    dataIndex: 'name',
    title: '姓名',
    width: '200px',
    key: 'name',
    align: 'left',
  },
  {
    dataIndex: 'country',
    title: '国家',
    width: '100px',
    fixed: 'end',
  },
  {
    dataIndex: 'age',
    title: '年龄',
    width: '100px',
  }
]
export default function Home() {
  return (
    <>
      <Table
       columns={columns}>

      </Table>
    </>
  )
}

但是,此时fixed和width都没有生效,想让他们生效,需要给table设置scroll属性,

这里fixed也生效了,但是要滑动滑动条才能看出效果

添加数据

初始时添加

通过dataSource属性,给table绑定数据。

dataSource的绑定值是数组,数组中每个对象是一行数据:

javascript 复制代码
import { Table } from 'antd'
import type { TableColumnsType } from 'antd';
  

const columns: TableColumnsType<any> = [
  {
    dataIndex: 'name',
    title: '姓名',
    width: '200px',
    key: 'name',
    align: 'left',
  },
  {
    dataIndex: 'country',
    key: 'country',
    title: '国家',
    width: '100px',
    fixed: true,
  },
  {
    dataIndex: 'age',
    title: '年龄',
    width: '100px',
  }
]

const dataSource = [
  {
    name: '李梅梅',
    country:'中国',
    age:20,
  },
  {
    name: '张三',
    country:'中国',
    age:28,
  },
  {
    name: '李四',
    country:'中国',
    age:30,
  },
]

export default function Home() {
  return (
    <>
      <Table
        scroll={ { x:0,y:9999 }}
        dataSource={dataSource}
        columns={columns}>

      </Table>
    </>
  )
}

动态添加

如果需要动态更新table,其思想是在需要动态变化的地方以useState的方式更新dataSource绑定的数组,告知react我的数据发生了变化,需要更新渲染:

javascript 复制代码
import { Table, Button } from 'antd'
import type { TableColumnsType } from 'antd';
import { useState } from 'react'
   

const columns: TableColumnsType<any> = [
  {
    dataIndex: 'name',
    title: '姓名',
    width: '200px',
    key: 'name',
    align: 'left',
  },
  {
    dataIndex: 'country',
    key: 'country',
    title: '国家',
    width: '100px',
    fixed: true,
  },
  {
    dataIndex: 'age',
    title: '年龄',
    width: '100px',
  }
]




export default function Home() {

  const [dataSource, setDataSource] = useState([
    {
      name: '李梅梅',
      country:'中国',
      age:20,
    },
    {
      name: '张三',
      country:'中国',
      age:28,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
  ])
  
  return (
    <>
      <Button onClick={ ()=>{
        dataSource.push({name:'韩梅',country:'中国',age:22})
        setDataSource([...dataSource])
      } }>
        click
      </Button>
      <Table
        scroll={ { x:0,y:9999 }}
        dataSource={dataSource}
        columns={columns}>

      </Table>
    </>
  )
}

分页

https://ant.design/components/pagination-cn

使用paginaion配置分页,pagination可以和onChange配合使用:

思路是在pagination中配置当前分页信息,当分页变化时,触发onChange,onChange内编写接口请求、分页数据更新逻辑。

onChange事件在table或者pagination中都具有,写在哪个onChange中都可以

javascript 复制代码
import { Table, Button } from 'antd'
import type { TableColumnsType } from 'antd';
import { useState } from 'react'
   

const columns: TableColumnsType<any> = [
  {
    dataIndex: 'name',
    title: '姓名',
    width: '200px',
    key: 'name',
    align: 'left',
  },
  {
    dataIndex: 'country',
    key: 'country',
    title: '国家',
    width: '100px',
    fixed: true,
  },
  {
    dataIndex: 'age',
    title: '年龄',
    width: '100px',
  }
]

export default function Home() {

  const [dataSource, setDataSource] = useState([
    {
      name: '李梅梅',
      country:'中国',
      age:20,
    },
    {
      name: '张三',
      country:'中国',
      age:28,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
    {
      name: '李四',
      country:'中国',
      age:30,
    },
  ])

  const [pagination, setPagination] = useState({
    pageSize: 10,
    total: 13,
    current: 1,
  })

  return (
    <>
      <Button onClick={ ()=>{
        dataSource.push({name:'韩梅',country:'中国',age:22})
        setDataSource([...dataSource])
      } }>
        click
      </Button>
      <Table
          scroll={ { x:0,y:3000 }}
          dataSource={dataSource}
          columns={columns}
          pagination={{
              pageSize:pagination.pageSize,
              current: pagination.current,
              total: pagination.total,
              pageSizeOptions:[10,50,100,200,500,1000],
              showSizeChanger: true,
              //(page, type: 'page' | 'prev' | 'next', originalElement) => React.ReactNode
              itemRender: (page, type, originalElement) => {
                    if (type === 'prev') {
                      return <a>上一页</a>;
                    }
                    if (type === 'next') {
                      return <a>下一页</a>;
                    }

                    return originalElement;
                  }
          }}
          onChange={(pagination)=>{
            console.log(pagination)
            /**{
              "current": 2,
              "pageSize": 10,
              "total": 13,
              "pageSizeOptions": [
                  10,
                  50,
                  100,
                  200,
                  500,
                  1000
              ],
              "showSizeChanger": true
          } */
         
         //进行接口请求等...

         //更新分页数据
          }}
      >
      </Table>
    </>
  )
}
相关推荐
小lu飞1 小时前
2026小红书小工具怎么制作:纯前端 ZIP 打包、沙箱限制与笔记挂载流程
前端·笔记·ai·ai编程
无心水4 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd5 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
Zhao-Jichao8 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李8 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga10 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd10 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白11 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李11 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao14 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记