当前位置: 首页 > news >正文

表格管理---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']
}

 

相关文章:

  • Ubuntu 20.04下配置VSCode以支持ROS开发
  • Mysql面试篇笔记:
  • k8s架构及服务详解
  • CSS3中布局方式说明
  • C# OnnxRuntime部署DAMO-YOLO交通标识检测
  • Spring 中哪些情况下,不能解决循环依赖问题?
  • python环境检测
  • 责任链模式详解和在Spring Boot 项目中的使用场景
  • 软开经验总结
  • 【C语言】联合体 `union` 的妙用
  • 第十五届蓝桥杯:dfs之数字接龙
  • 深入解析雪花算法(Snowflake):分布式唯一ID的优雅解决方案
  • 1、CI/CD 平台安装部署(Gitlab+Jenkins)
  • 10个常见的Java面试问题及其答案
  • 嵌入式学习前要了解的基础知识
  • PPP协议
  • nextjs+material UI实现换肤功能
  • 数据集/API 笔记:湿球黑球温度(WBGT)观测数据
  • Linux cat 命令
  • JavaWeb-idea配置smart tomcat
  • 祝贺!苏翊鸣成功解锁“2160”
  • 当创业热土遇上年轻气息,上海南汇新城发展如何再发力?
  • 上海消防全面推行“检查码”,会同相关部门推行“综合查一次”
  • 新村回响:一周城市生活
  • 竞彩湃|霍芬海姆看到保级曙光,AC米兰专注于意大利杯
  • 第一集|《刑警的日子》很生活,《执法者们》有班味