从0学习React(10)

示例代码:

const columns: ProColumns<API.BasicInfoItem>[] = [
  {
    title: '设备编码',
    dataIndex: 'deviceCode',
    ellipsis: true,
    width: 40,
  },
  {
    title: '设备名称',
    dataIndex: 'deviceName',
    ellipsis: true,
    width: 50,
  },
  {
    title: '产线-工序',
    dataIndex: 'deviceClassifyName',
    ellipsis: true,
    search: false,
    width: 40,
  },
  {
    title: '规格',
    dataIndex: 'deviceSpecification',
    ellipsis: true,
    search: false,
    width: 30,
  },
  {
    title: '型号',
    dataIndex: 'deviceModel',
    ellipsis: true,
    search: false,
    width: 30,
  },
  {
    title: '设备等级',
    dataIndex: 'deviceType',
    ellipsis: true,
    width: 30,
    search: false,
    valueType: 'select',
    request: async () => {
      const { data } = await getBaseDefineOption('DEVICE_CLASS');
      return data || [];
    },
  },
  {
    title: '设备状态',
    dataIndex: 'state',
    ellipsis: true,
    width: 30,
    valueType: 'select',
    request: async () => {
      const { data } = await getBaseDefineOption('DEVICE_STATE');
      return data || [];
    },
  },
  {
    title: '操作',
    dataIndex: 'option',
    valueType: 'option',
    fixed: 'right',
    width: 30,
    render: (_, record) => [
      <Dropdown
        key={record.id}
        menu={{
          items,
          onClick: (menu) => {
            switch (menu.key) {
              case 'edit':
                setCurrentRow(record);
                setType(2);
                openDetail();
                break;
              case 'view':
                setCurrentRow(record);
                setType(3);
                openDetail();
                break;
              case 'copy':
                handleModalVisible(true);
                setCurrentRow(record.id);
                break;
              case 'del':
                Modal.confirm({
                  title: '确认',
                  icon: <ExclamationCircleOutlined />,
                  content: '确定删除设备信息吗?',
                  okText: '确认',
                  cancelText: '取消',
                  onOk: () => {
                    delBasicInfo(record.id).then((res) => {
                      if (res.code === '00000') {
                        message.success('已删除该设备信息!');
                        // 刷新表格数据
                        actionRef.current?.reload();
                      }
                    });
                  },
                });
                break;
            }
          },
        }}
      >
        <Button icon={<UnorderedListOutlined />} size="small" type="primary">
          <DownOutlined />
        </Button>
      </Dropdown>,
    ],
  },
];

这段代码定义了一个名为 columns 的数组,用于配置 ProTable 的列。每个列对象包含列的标题、数据索引、宽度、是否启用省略号、搜索配置、值类型等属性。最后一列是一个操作列,包含一个下拉菜单,用于执行编辑、查看、复制和删除操作。

使用的语法和概念

1. TypeScript 类型注释
  • ProColumns<API.BasicInfoItem>[] 指定了 columns 数组的类型。

  • ProColumns 是 ProTable 的列配置类型,API.BasicInfoItem 是数据项的类型。

    const columns: ProColumns<API.BasicInfoItem>[] = [ ... ];

2. 列配置对象
  • 每个列配置对象包含多个属性,如 titledataIndexellipsiswidth 等。

    {
    title: '设备编码',
    dataIndex: 'deviceCode',
    ellipsis: true,
    width: 40,
    }

3. 异步请求数据
  • request 属性用于异步请求数据,返回一个 Promise 对象。

    {
    title: '设备等级',
    dataIndex: 'deviceType',
    ellipsis: true,
    width: 30,
    search: false,
    valueType: 'select',
    request: async () => {
    const { data } = await getBaseDefineOption('DEVICE_CLASS');
    return data || [];
    },
    }

看完这里,其实也还不算很懂,因为有些代码的意思我还没理解,于是我问AI,这段代码什么意思:

{
  title: '设备等级',
  dataIndex: 'deviceType',
  ellipsis: true,
  width: 30,
  search: false,
  valueType: 'select',
  request: async () => {
    const { data } = await getBaseDefineOption('DEVICE_CLASS');
    return data || [];
  },
}

代码解析

1. title: '设备等级'
  • title 属性指定了列的标题,显示为"设备等级"。
2. dataIndex: 'deviceType'
  • dataIndex 属性指定了列对应的数据字段,即 deviceType
3. ellipsis: true
  • ellipsis 属性指定了文本是否超出时显示省略号。
4. width: 30
  • width 属性指定了列的宽度,为 30。
5. search: false
  • search 属性指定了该列是否在表格的搜索表单中显示。设置为 false 表示不显示。
6. valueType: 'select'
  • valueType 属性指定了列的值类型为 select,即下拉选择框。
7. request: async () => { ... }
  • request 属性是一个异步函数,用于异步请求数据。

  • 在这个例子中,request 函数调用 getBaseDefineOption 函数,传入 'DEVICE_CLASS' 作为参数,来获取设备等级的选项数据。

    request: async () => {
    const { data } = await getBaseDefineOption('DEVICE_CLASS');
    return data || [];
    },

使用的语法和概念

1. 异步函数(Async Function)
  • async 关键字用于定义一个异步函数,使其返回一个 Promise 对象。

  • await 关键字用于等待一个 Promise 对象的解析。

    request: async () => {
    const { data } = await getBaseDefineOption('DEVICE_CLASS');
    return data || [];
    },

2. 解构赋值(Destructuring Assignment)
  • 解构赋值语法用于从对象中提取数据,并将其赋值给变量。

    const { data } = await getBaseDefineOption('DEVICE_CLASS');

3. 默认值(Default Value)
  • 使用 || 运算符指定一个默认值,即如果 datanullundefined,则返回一个空数组 []

    return data || [];

相关推荐
I_Am_Me_3 分钟前
【JavaEE进阶】 JavaScript
开发语言·javascript·ecmascript
雯0609~10 分钟前
网页F12:缓存的使用(设值、取值、删除)
前端·缓存
℘团子এ14 分钟前
vue3中如何上传文件到腾讯云的桶(cosbrowser)
前端·javascript·腾讯云
学习前端的小z19 分钟前
【前端】深入理解 JavaScript 逻辑运算符的优先级与短路求值机制
开发语言·前端·javascript
soulteary29 分钟前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
前端百草阁43 分钟前
【TS简单上手,快速入门教程】————适合零基础
javascript·typescript
彭世瑜43 分钟前
ts: TypeScript跳过检查/忽略类型检查
前端·javascript·typescript
FØund40444 分钟前
antd form.setFieldsValue问题总结
前端·react.js·typescript·html
Backstroke fish44 分钟前
Token刷新机制
前端·javascript·vue.js·typescript·vue
zwjapple1 小时前
typescript里面正则的使用
开发语言·javascript·正则表达式