React antd的table表格之嵌套表格

React antd的table表格之嵌套表格

最近做了几个pc端的后台管理需求,涉及了table中的嵌套表格,嵌套的子表格大体分为两种效果:

  • 效果1-----点击展开新的子表格,旧的子表格关闭
  • 效果2-----可同时展开多个子表格

效果1:嵌套表格,实现点击展开按钮,展开子表格请求接口数据,点击新的子表格收起原来的子表格效果

// 设置一个State用来储存展开的行,控制属性
const [expandedRowKeys,setExpandedRowKeys] = useState<any>([''])

//配置展开属性
expandable={{
            ①onExpand ,// 请求子表格后台数据
            ②onExpandedRowsChange,// 展开的行变化时触发
            ③expandedRowRender, // 子表格dom部分
            ④expandedRowKeys,// 展开的行,控制属性State的变量
        }}
// ①获取后台接口子表格数据
  const onExpand = (expanded: any, record: any) => {
    *****发送请求函数********
  };

// ②展开的行变化时触发
  const onExpandedRowsChange=(expandedRows: any)=>{
    expandRows(expandedRows)
  }
// ③子表格dom部分
  const expandedRowRender=()=>{
   return (
     <div>子表格dom内容部分</div>
  )
}
//④点击新的子表格收起原展开的子表格
const expandRows = (rows: any) => {
    // 点开是['',1]   ['',2]的数组 ,最后一个是我们当前展开的行,我们最后set一个['',当前展开行的下标]到expandedRowKeys就可以实现 ‘点击新的子表格收起原展开的子表格’
    const arrTemp = ['']
    setExpandedRowKeys(arrTemp.concat(rows[rows.length - 1]))
}

效果2:嵌套表格,可同时展开多个子表格,将各个子表格loading效果和接口返回数据根据唯一标识进行数据和loading的隔离

 // 嵌套表格的loading状态
  const [loadingObj, setLoadingObj] = useState<any>({});
 // 嵌套表格全部的数据源
  const [tableData, setTableData] = useState<any>({});
 //配置展开属性
expandable={{
            ①onExpand ,// 请求子表格后台数据
            ③expandedRowRender, // 子表格dom部分
        }}

// 请求后台数据
  const queryExpandedData = async (record: any, key: any) => {
    try {
      const table = { ...tableData };
      const loading = { ...loadingObj };
      const result: any = await ***子表格的请求***({});
      const data: any = result?.dataArr;
      table[key] = data;
      loading[key] = false;
      setTableData(table);
      setLoadingObj(loading);
    } catch (error) {
      console.log(error);
    }
  };
 // 子表格展开的点击函数
const onExpand=(expanded: any, record: any)=>{
 const key = record?.id;
    // 之前展开过
    if (tableData[key]?.length) return;
    // 第一次展开
    const loading = { ...loadingObj };
    loading[key] = true;
    setLoadingObj(loading);
    queryExpandedData(record, key);
}
// 子表格dom部分
const expandedRowRender=()=>{
   return (
     <div>子表格dom内容部分</div>
  )
}
        
  
ShapeDrawable是Android中的一个Drawable类型,它可以让开发者自定义绘制出各种形状的图形。下面是ShapeDrawable的用法: 1.创建一个ShapeDrawable对象 可以通过如下方式创建一个ShapeDrawable对象: ``` ShapeDrawable shapeDrawable = new ShapeDrawable(); ``` 2.设置ShapeDrawable的形状 在创建ShapeDrawable对象后,需要设置它的形状。ShapeDrawable支持以下几种形状: 矩形(RectangleShape): ``` shapeDrawable.setShape(new RectShape()); ``` 圆形(OvalShape): ``` shapeDrawable.setShape(new OvalShape()); ``` 线条(LineShape): ``` shapeDrawable.setShape(new LineShape()); ``` 圆角矩形(RoundRectShape): ``` float[] radii = {10, 10, 10, 10, 0, 0, 0, 0}; // 每个角的半径 RectF rectF = new RectF(0, 0, 100, 100); // 矩形的位置和大小 shapeDrawable.setShape(new RoundRectShape(radii, rectF, radii)); ``` 3.设置ShapeDrawable的颜色 设置ShapeDrawable的颜色可以使用setColor()方法: ``` shapeDrawable.getPaint().setColor(Color.RED); ``` 4.设置ShapeDrawable的边框 设置ShapeDrawable的边框可以使用setStroke()方法: ``` shapeDrawable.getPaint().setStrokeWidth(5); shapeDrawable.getPaint().setStyle(Paint.Style.STROKE); shapeDrawable.getPaint().setColor(Color.BLACK); ``` 5.使用ShapeDrawable 最后,可以将ShapeDrawable对象设置为View的背景或者ImageView的src属性,或者直接在自定义绘制的时候使用它。例如,在Activity的onCreate()方法中设置一个矩形ShapeDrawable的背景: ``` ShapeDrawable shapeDrawable = new ShapeDrawable(); shapeDrawable.setShape(new RectShape()); shapeDrawable.getPaint().setColor(Color.RED); View view = findViewById(R.id.view); view.setBackground(shapeDrawable); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值