react+antd Table表头按钮一键展开或关闭

记录自己在解决这个需求中碰到的问题,首先在这里感谢Deidei☀️在这个过程中提供的帮助。Deidei☀️关于react项目中解决antd Table展开行可全部展开或关闭文章见 antd Table 展开行可全部展开或关闭

需求如图,在表头添加一个按钮,控制子表全部展开或关闭。
在这里插入图片描述
先看看antd Table官方文档对展开行的处理 antd表格 Table可展开在这里插入图片描述
官方文档中对于表格展开行并没有一件全部展开或关闭,我在这里采用了Deidei☀️的解决方法:写一个表头按钮的样式放到同级的div中,再绝对定位到表格里。

初始化

constructor(props){
   
  super(props)
  this.state = {
   
      expKeys: [], // 初始化expKeys
   }
}

表头按钮样式

// 同级的div绝对定位,在上一级div中相对定位
<div style={
   {
    position: 'absolute', left: 30, top: 8, zIndex: 1 }}>
<div
  onClick={
   () => this.openOrCloseAll(true, adata)}  // openOrCloseAll点击表头按钮事件
  style={
   {
    display: this.state.expKeys.length ? 'inline-block' : 'none' }}
  className="ant-table-row-expand-icon ant-table-row-expanded"
/>
<div
  onClick={
   () => this.openOrCloseAll(false, adata)}
  style={
   {
    display: this.state.expKeys.length ? 'none' : 'inline-block' }}
  className="ant-table-row-expand-icon ant-table-row-collapsed"
/>
</div>

点击表头按钮事件

openOrCloseAll = (type, adata) => {
   
    this.setState({
   
        expKeys: type ? [] : adata && adata.map(i => i.id)
    })
  };

父表中Table的属性

<Table
  dataSource={
   adata}
  size="small"
  // 可控的展开与关闭数组
  expandedRowKeys={
   this.state.expKeys}
  // 单个展开或关闭,操作数组
  onExpand={
   (b, r) => {
   
  	const {
    expKeys } = this.state;
  	const newExp = b ? [...expKeys, r.id] : expKeys
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在React项目中使用Ant Design的Table组件动态生成表头,需要完成以下步骤: 1. 定义表格数据源 首先需要定义表格的数据源,可以使用一个数组来存储表格的数据,例如: ```javascript const data = [ { key: '1', name: 'John Brown', age: 32, address: 'New York No. 1 Lake Park', }, { key: '2', name: 'Jim Green', age: 42, address: 'London No. 1 Lake Park', }, { key: '3', name: 'Joe Black', age: 32, address: 'Sidney No. 1 Lake Park', }, ]; ``` 2. 定义表头数据源 接下来需要定义表头的数据源,可以使用一个数组来存储表头的数据,例如: ```javascript const columns = [ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Age', dataIndex: 'age', key: 'age', }, { title: 'Address', dataIndex: 'address', key: 'address', }, ]; ``` 3. 动态生成表头 在Ant Design的Table组件中,可以使用columns属性来指定表头数据源。为了动态生成表头,需要在渲染组件时动态生成表头的数据源,并将其传递给Table组件的columns属性,例如: ```javascript import React, { useState } from 'react'; import { Table } from 'antd'; const DynamicTable = () => { const [columns, setColumns] = useState([ { title: 'Name', dataIndex: 'name', key: 'name', }, { title: 'Age', dataIndex: 'age', key: 'age', }, { title: 'Address', dataIndex: 'address', key: 'address', }, ]); const handleAddColumn = () => { const newColumn = { title: `Column ${columns.length + 1}`, dataIndex: `column${columns.length + 1}`, key: `column${columns.length + 1}`, }; setColumns([...columns, newColumn]); }; return ( <> <button onClick={handleAddColumn}>Add Column</button> <Table dataSource={data} columns={columns} /> </> ); }; export default DynamicTable; ``` 在上面的代码中,我们使用useState钩子来定义表头的数据源,并渲染一个添加列的按钮。当点击添加列按钮时,会动态生成一个新的列,并将其添加到表头的数据源中。这样就可以动态生成表头了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值