从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 || [];

相关推荐
小林ixn2 分钟前
前端开发新利器:用Vite+通义万相实现多模态图像生成(附API密钥安全方案)
javascript
Rain5095 分钟前
2.3. 安全配置:环境变量与 API 密钥管理
前端·人工智能·后端·安全·ai·node.js·ai编程
用户938515635075 分钟前
HTML5 Canvas 从入门到AI驱动游戏开发:手把手教你用原生JS打造飞机游戏与数据可视化
前端·javascript·人工智能
William_Xu6 分钟前
var [a, b] = { a: 1, b: 2 } 解构赋值
前端
用户059540174467 分钟前
Playwright 网络拦截踩坑实录:我花了 3 小时才搞懂数据持久化验证的正确姿势
前端·css
weedsfly7 分钟前
React 开发中的闭包陷阱:四个真实场景,让你彻底理解闭包
前端·react.js
MariaH8 分钟前
Git Cherry Pick 常用操作
前端
杨云龙UP10 分钟前
Oracle 19c 单机环境安装目录规划与磁盘永久挂载操作指南_2026-06-15
运维·服务器·数据库·oracle·部署·目录·规划
初圣魔门首席弟子14 分钟前
AI Agent 核心原理:工具调用(Function Calling)完整工作流程详解
前端·数据库·人工智能
herinspace17 分钟前
管家婆云辉煌开单优化
服务器·数据库·电脑·管家婆软件·财务软件