Antdesign_table 点击事件

1,749 阅读2分钟

1.table组件的引入后

    `     <Table
              rowKey={(record) => record.id}
              columns={columns}
              dataSource={reviewList}
              pagination={totalNum > 10 ? pagination : false}
            />
          </div>
    `
    

2.1columns用法

columns相当于一个表格的title,可以通过数据源,将自己想要的数据放入表格中

`
  const columns = [
    {
      title: '服务编号',
      dataIndex: 'serviceNumber',
      key: 'serviceNumber',
      ellipsis: true,
      render: (text, record) => {
        return <a onClick={() => reviewBtn(record)}>{text}</a>;
      },
    },
  ]

 `
 title是每一列的标题,dataIndex是对应数据源的key,可以通过render属性将每一列的元素添加点击事件,并且通过传入record将这一行的数据传给点击函数
 
 
`   
  {
  title: '创建时间',
  dataIndex: 'createDate',
  key: 'createDate',
  ellipsis: true,
  sorter: (a, b) => Date.parse(a.createDate) - Date.parse(b.createDate),
  render: (text, record) => moment(record.createDate).format('YYYY-MM-DD HH:mm:ss'),
   },
`
sorter属性,是添加对时间的先后进行排序,Date.parse格式化时间转换为时间戳,这样排序才有效果
moment是将后端返回的时间戳转换为前端需要的格式
 

2.2 点击跳转详情页

`
import { history } from 'umi';
const reviewBtn = (record) => {
    history.push({
      pathname: '/supplyDemandApproval/approved/detailDemand',
      query: {
        id: record.id,
        step: 'serviceNumber',
      },
    });
  }; 
  
在umi中引入history、,pathname是自己在路由配置中配置的组件,在跳转页面时,可以通过query进行传递参数,可以传入所点击着一行数据的任何数据,而step是自己设置的标识,以便区分所渲染的内容
  
`

2.3详情页接收参数,识别标识区分渲染

` 
  const goBack = () => {  //这是点击按钮返回放一个页面
    window.history.back();
  };
  
  
  //这个是获取传递过来的参数,就是serviceNumber
  console.log(history.location.query.step, '获取参数');
  
  //可以通过传入的参数不同,渲染不同的内容
  {history.location.query.step === 'serviceNumber' && <span>详情</span>}

`

2.4通过传入的参数判断 step组件的默认选中

`
      <Steps
            current={Number(
              history.location.query.step === 'review' || history.location.query.step === 'propose'
                ? 1
                : history.location.query.step === 'accept' || history.location.query.step === 'bill'
                ? 2
                : history.location.query.step === 'check'
                ? 3
                : history.location.query.step === 'duty'
                ? 5
                : 4
            )}
            size="small"
          >
            <Step title="需求申请" />
            <Step title="需求复核" />
            <Step title="需求受理" />
            <Step title="需求审核" />
            {history.location.query.step !== 'serviceNumber' && <Step title="资源挂载" />}
            <Step title="供需完成" />
          </Steps>
          
这里通过传入参数判断 是否渲染资源挂载这一项,在这之前使用了三目运算符的多重判断

`

3. dataSource是数据源,自己mock或者从后端获取的数据,数据里的属性需要和自己设置的dataIndex相对应 data: { records: [ { id: 10, serviceNumber: '123456', itemName: '最多跑哟躺啊', materialsName:'材料名称', applyScene: '应用场景', provideUnit: '供给部门', cagalogInfo: '姓名|年龄|电话', checkDate: '2021-11-04', status: '待复核', }, ] } 4. pagination分页功能因数据条数选择性的渲染

    ` 
    pagination={totalNum > 10 ? pagination : false}
    
    //将pagination封装为一个对象,直接都传过去
      const pagination = {
        total: totalNum,
        showSizeChanger: true,
        showTotal: () => `共有${totalNum}条,每页显示:`,
        onChange: onPageChange,
        onShowSizeChange: onPageChange,
        pageSize: pageSize,
        current: pageNum,
      };
      
      //onPageChange函数,设置状态,通过useEffect 添加依赖请求数据
        const onPageChange = (page, size) => {
            if (pageSize === size) {
              setPageNum(page);
            } else {
              setPageNum(1);
              setPageSize(size);
            }
         };
         onChange和onShowSizeChange需要都设置,分页才会有效果

    `

在table中加入树形结构,有个children属性尤为重要,默认是遇到children就认为是树形结构的下一级