表格管理---React

一、页面展示

二、使用到的小方法

A、自定义的函数方法

1、colunms

功能:用于生成表格的列表配置对象。接收过滤后的数据、更新过滤后的函数、全选状态、更新状态的函数,已勾选行的键数组以及更新该数组的函数作为参数。

本代码使用到的部分:

复制代码
// 表格列配置
const columns = (filteredDataSource, setFilteredDataSource, isAllChecked, setIsAllChecked, checkedKeys, setCheckedKeys) => [
  {
    title: (
      <Checkbox
        checked={isAllChecked}
        onChange={(e) => {
          const newChecked = e.target.checked;
          setIsAllChecked(newChecked);
          if (newChecked) {
            setCheckedKeys(filteredDataSource.map(item => item.key));
          } else {
            setCheckedKeys([]);
          }
        }}
      />
    ),
    dataIndex: '',
    render: (_, record) => (
      <Checkbox
        checked={checkedKeys.includes(record.key)}
        onChange={(e) => {
          const newCheckedKeys = e.target.checked
            ? [...checkedKeys, record.key]
            : checkedKeys.filter(key => key !== record.key);
          setCheckedKeys(newCheckedKeys);
          setIsAllChecked(newCheckedKeys.length === filteredDataSource.length);
        }}
      />
    )
  },
  {
    title: '接口名称',
    dataIndex: 'interfaceName',
    key: 'interfaceName',
  },
  {
    title: '接口描述',
    dataIndex: 'interfaceDesc',
    key: 'interfaceDesc'
  },
  {
    title: '接口分类',
    dataIndex: 'interfaceCategory',
    key: 'interfaceCategory'
  },
  {
    title: '接口来源',
    dataIndex: 'interfaceSource',
    key: 'interfaceSource'
  },
  {
    title: 'API状态',
    dataIndex: 'apiStatus',
    key: 'apiStatus'
  },
  {
    title: '更新时间',
    dataIndex: 'updateTime',
    key: 'updateTime',
    sorter: (a, b) => new Date(a.updateTime).getTime() - new Date(b.updateTime).getTime(),
    // 时间排序
    sortDirections: ['descend', 'ascend']
  },
  {
    title: '操作',
    dataIndex: 'operation',
    key: 'operation',
    render: (_, record) => { //render函数的作用 
      const handlePublish = () => {
        // 模拟发布成功
        setFilteredDataSource((prevData) =>
          prevData.map((item) =>
            item.key === record.key ? { ...item, apiStatus: '已发布' } : item
          )
        );
      };

      const handleStop = () => {
        // 模拟停用操作
        setFilteredDataSource((prevData) =>
          prevData.map((item) =>
            item.key === record.key ? { ...item, apiStatus: '已停用' } : item
          )
        );
      };

      if (record.apiStatus === '未发布') {
        return (
          <div>
            <Button onClick={handlePublish}>发布</Button>
            <Button>接口测试</Button>
            <Button>编辑</Button>
            <Button>删除</Button>
          </div>
        );
      } else if (record.apiStatus === '已发布') {
        return (
          <div>
            <Button onClick={handleStop}>停用</Button>
            <Button>接口测试</Button>
          </div>
        );
      } else if (record.apiStatus === '已停用') {
        return (
          <div>
            <Button onClick={handlePublish}>发布</Button>
            <Button>接口测试</Button>
            <Button>编辑</Button>
          </div>
        );
      } else if (record.apiStatus === '草稿') {
        return (
          <div>
            <Button>编辑</Button>
            <Button>删除</Button>
          </div>
        );
      } else {
        return null;
      }
    }
  }
];

2、OnSearch (搜索函数)

功能:根据输入的接口来源、API状态和接口名称对原始数据进行过滤,并更新filteredDataSource 状态。同时将全选状态和以勾选行的键数重置。

本代码使用到的部分

复制代码
 // 查询实现
  const onSearch = () => {
    let filteredData = dataSource; // 初始化过滤后的数据为原始数据
    if (interfaceSource) {
      // 根据接口来源过滤数据
      filteredData = filteredData.filter(item => item.interfaceSource === interfaceSource);
    }
    if (apiStatus) {
      filteredData = filteredData.filter(item => item.apiStatus === apiStatus);
    }
    if (interfaceName) {
      filteredData = filteredData.filter(item => item.interfaceName.includes(interfaceName));
    }
    setFilteredDataSource(filteredData);
    setIsAllChecked(false);
    setCheckedKeys([]);
  };

3、onReset (重置功能)

功能:将接口来源输入框内容、API状态和接口名称重置为空,再恢复成原始数据,与此同时,还需要恢复全选状态和勾选行状态(如果有勾选)

涉及代码块

复制代码
  // 重置实现
  const onReset = () => {
    setInterfaceSource('');
    setApiStatus('');
    setInterfaceName('');
    setFilteredDataSource(dataSource);
    setIsAllChecked(false);
    setCheckedKeys([]);
  };

4、新增接口模态框

功能:当点击需要触发的按钮,此时就会弹出这个模态框。将新增接口模态框的显示状态 visible 设置为 true,从而显示模态框。将新增接口模态框的显示状态 visible 设置为 false,关闭模态框,并将选中的分类重置为空。检查是否选择了分类,如果未选择则给出提示;如果选择了分类,则可以执行实际的接口新增逻辑,最后关闭模态框并重置选中的分类。

复制代码
  // 显示新增接口模态框
  const showModal = () => {
    setVisible(true);
  };

  // 关闭新增接口模态框
  const handleCancel = () => {
    setVisible(false);
    setSelectedCategory('');
  };

  // 提交新增接口信息
  const handleOk = () => {
    if (!selectedCategory) {
      // 分类未选择,给出提示
      console.log('请选择分类');
      return;
    }
    // 这里可以添加实际的接口新增逻辑
    console.log('新增接口,分类:', selectedCategory);
    setVisible(false);
    setSelectedCategory('');
  };

B、Ant Design组件的内置方法

1、Select组件、Input组件、Checkbox组件中的Onchange方法

功能:当用户选择下拉框中的选项时触发,用于更新相应的状态。

功能:当用户在输入框中输入内容时触发,用于更新接口名称的状态。

功能:当用户勾选或取消勾选复选框时触发,用于更新全选状态和已勾选行的键数组。

涉及代码块:

复制代码
{/* 查询区域 */}
          <div style={{ display: 'flex', justifyContent: 'center', marginBottom: 16 }}>
            <span>数据来源:</span>
            <Select
              onChange={(value) => setInterfaceSource(value)}
              value={interfaceSource}
            >
              <Option value="数据服务">数据服务</Option>
              <Option value="指标管理">指标管理</Option>
              <Option value="决策引擎">决策引擎</Option>
            </Select>
            <span style={{ marginLeft: 16 }}>api发布状态:</span>
            <Select
              onChange={(value) => setApiStatus(value)}
              value={apiStatus}
            >
              <Option value="已发布">已发布</Option>
              <Option value="已停用">已停用</Option>
              <Option value="未发布">未发布</Option>
              <Option value="草稿">草稿</Option>
            </Select>
            <span style={{ marginLeft: 16 }}>接口名称:</span>
            <Input
              placeholder="接口名称"
              value={interfaceName}
              onChange={(e) => setInterfaceName(e.target.value)}
              style={{ width: 200, marginLeft: 8 }}
            />



<Checkbox
        checked={isAllChecked}
        onChange={(e) => {
          const newChecked = e.target.checked;
          setIsAllChecked(newChecked);
          if (newChecked) {
            setCheckedKeys(filteredDataSource.map(item => item.key));
          } else {
            setCheckedKeys([]);
          }
        }}
      />

2、Table组件的sorter方法

功能:对表格的某一列进行排序,此代码中排序的内容是更新时间

涉及代码块:

复制代码
{
  title: '更新时间',
  dataIndex: 'updateTime',
  key: 'updateTime',
  sorter: (a, b) => new Date(a.updateTime).getTime() - new Date(b.updateTime).getTime(),
  sortDirections: ['descend', 'ascend']
}
相关推荐
GISer_Jing26 分钟前
前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
前端·react.js·面试
落霞的思绪1 小时前
CSS复习
前端·css
咖啡の猫3 小时前
Shell脚本-for循环应用案例
前端·chrome
百万蹄蹄向前冲6 小时前
Trae分析Phaser.js游戏《洋葱头捡星星》
前端·游戏开发·trae
朝阳5816 小时前
在浏览器端使用 xml2js 遇到的报错及解决方法
前端
GIS之路6 小时前
GeoTools 读取影像元数据
前端
ssshooter7 小时前
VSCode 自带的 TS 版本可能跟项目TS 版本不一样
前端·面试·typescript
你的人类朋友7 小时前
【Node.js】什么是Node.js
javascript·后端·node.js
Jerry8 小时前
Jetpack Compose 中的状态
前端
dae bal8 小时前
关于RSA和AES加密
前端·vue.js