You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为JHipster项目中的React表格添加exchange筛选下拉搜索功能

实现步骤

1. 新增筛选相关状态与选项计算

在你的组件内部添加以下代码,用于存储筛选值和生成去重的Exchange下拉选项:

import { useState, useMemo } from 'react';
import { Form } from 'react-bootstrap'; // 若项目已导入可忽略此行

// 组件内部代码
// 存储选中的Exchange筛选值,默认空值代表展示全部数据
const [selectedExchange, setSelectedExchange] = useState('');

// 从全量activePairsList中提取所有不重复的exchangeId作为下拉选项
const exchangeOptions = useMemo(() => {
  if (!activePairsList) return [];
  const allExchangeIds = activePairsList.map(item => item.exchangeId).filter(Boolean);
  return [...new Set(allExchangeIds)];
}, [activePairsList]);

// 筛选后的数据列表
const filteredActivePairs = useMemo(() => {
  if (!activePairsList) return [];
  // 未选中筛选值时返回全量数据
  if (!selectedExchange) return activePairsList;
  // 按选中的exchangeId过滤
  return activePairsList.filter(item => item.exchangeId === selectedExchange);
}, [activePairsList, selectedExchange]);

2. 新增下拉筛选UI

在表格外层的table-responsive div上方添加筛选控件,同时修改原有表格的渲染逻辑:

{/* Exchange筛选栏 */}
<div className="mb-3 d-flex align-items-center gap-2">
  <label htmlFor="exchange-filter" className="form-label mb-0">按Exchange筛选:</label>
  <Form.Select
    id="exchange-filter"
    value={selectedExchange}
    onChange={(e) => setSelectedExchange(e.target.value)}
    style={{ maxWidth: '220px' }}
  >
    <option value="">全部Exchange</option>
    {exchangeOptions.map(exchangeId => (
      <option key={exchangeId} value={exchangeId}>
        {exchangeId}
      </option>
    ))}
  </Form.Select>
</div>

{/* 原有table-responsive div代码,仅修改数据源相关逻辑即可 */}
<div className="table-responsive">
  {filteredActivePairs && filteredActivePairs.length > 0 ? (
    <Table responsive>
      {/* 原有thead代码完全保留 */}
      <thead>
        ...........
      </thead>
      <tbody>
        {/* 把原有的activePairsList.map替换为filteredActivePairs.map */}
        {filteredActivePairs.map((activePairs, i) => (
          <tr key={`entity-${i}`} data-cy="entityTable">
            {/* 原有单元格代码完全保留 */}
            ...........
          </tr>
        ))}
      </tbody>
    </Table>
  ) : (
    // 可选优化:区分全量无数据和筛选后无数据的提示
    !loading && <div className="alert alert-warning">
      {selectedExchange ? '当前选中的Exchange下无匹配数据' : 'No Active Pairs found'}
    </div>
  )}
</div>

注意事项

  • 原有排序逻辑无需修改,排序规则会自动作用在全量数据上,筛选后仍会保留排序效果
  • 如果你的exchangeId需要展示别名而非原始ID,可以修改exchangeOptions的生成逻辑,把ID和对应的展示名称做映射即可

内容的提问来源于stack exchange,提问作者user1285928

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:15:03