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

如何在React中让AgGrid指定列整行可点击并跳转至新表格?

实现AgGridReact指定列的点击跳转功能

1. 修改原表格,为Symbol列添加可点击交互

AgGridReact需要通过cellRenderer自定义单元格内容,才能实现点击跳转。下面提供两种实现方式:

方式一:使用NavLink(react-router-dom)

import { NavLink } from 'react-router-dom';
import { useState, useEffect } from 'react';
import { AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-balham.css';

function DataInfo() { 
  const [rowData, setRowData] = useState([]);  

  const columns = [ 
    { 
      headerName: "Symbol", 
      field: "symbol",
      // 自定义单元格渲染,生成可跳转的链接
      cellRenderer: (params) => {
        return <NavLink to={`/symbol/${params.value}`}>{params.value}</NavLink>;
      }
    }, 
    { headerName: "Name", field: "name" }, 
    { headerName: "Industry", field: "industry" }  
  ];  

  useEffect(() => { 
    fetch('http://localhost:8080/all') 
      .then(res => res.json())
      .then(data => setRowData(data))
  }, []);

  return ( 
    <div className="DataInfo"> 
      <div 
         className="ag-theme-balham" 
         style={{ height: "300px", width: "600px" }} 
      > 
          <AgGridReact
            columnDefs={columns}  
            rowData={rowData}  
          /> 
      </div> 
    </div> 
  )
};  

方式二:使用useNavigate(react-router v6+)

import { useNavigate } from 'react-router-dom';
import { useState, useEffect } from 'react';
import { AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-balham.css';

function DataInfo() { 
  const [rowData, setRowData] = useState([]);  
  const navigate = useNavigate();

  const columns = [ 
    { 
      headerName: "Symbol", 
      field: "symbol",
      cellRenderer: (params) => {
        return (
          <span 
            style={{ cursor: 'pointer', color: '#165DFF', textDecoration: 'underline' }}
            onClick={() => navigate(`/symbol/${params.value}`)}
          >
            {params.value}
          </span>
        );
      }
    }, 
    { headerName: "Name", field: "name" }, 
    { headerName: "Industry", field: "industry" }  
  ];  

  useEffect(() => { 
    fetch('http://localhost:8080/all') 
      .then(res => res.json())
      .then(data => setRowData(data))
  }, []);

  return ( 
    <div className="DataInfo"> 
      <div 
         className="ag-theme-balham" 
         style={{ height: "300px", width: "600px" }} 
      > 
          <AgGridReact
            columnDefs={columns}  
            rowData={rowData}  
          /> 
      </div> 
    </div> 
  )
};  

2. 实现详情页面,接收参数并渲染数据

创建详情页面组件,通过useParams获取URL中的symbol参数,再请求对应数据渲染表格:

import { useState, useEffect } from 'react';
import { useParams } from 'react-router-dom';
import { AgGridReact } from 'ag-grid-react';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-balham.css';

function SymbolDetail() {
  const { symbol } = useParams();
  const [detailData, setDetailData] = useState([]);

  useEffect(() => {
    if (symbol) {
      // 根据点击的symbol请求对应数据
      fetch(`http://localhost:8080/detail/${symbol}`)
        .then(res => res.json())
        .then(data => setDetailData(data))
        .catch(err => console.error('获取详情数据失败:', err));
    }
  }, [symbol]);

  // 根据实际返回的数据结构定义列
  const detailColumns = [
    { headerName: "指标名称", field: "indicatorName" },
    { headerName: "指标值", field: "indicatorValue" },
    // 其他自定义列...
  ];

  return (
    <div className="SymbolDetail">
      <h2>{symbol} 详情</h2>
      <div className="ag-theme-balham" style={{ height: '300px', width: '600px' }}>
        <AgGridReact columnDefs={detailColumns} rowData={detailData} />
      </div>
    </div>
  );
}

export default SymbolDetail;

3. 配置路由

在路由根组件中添加页面路由:

import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import DataInfo from './DataInfo';
import SymbolDetail from './SymbolDetail';

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<DataInfo />} />
        <Route path="/symbol/:symbol" element={<SymbolDetail />} />
      </Routes>
    </Router>
  );
}

关键说明

  • AgGrid列本身不支持直接绑定点击事件,必须通过cellRenderer自定义单元格内容才能实现交互。
  • 确保react-router依赖已安装,路由配置正确,参数能被详情页正常获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:35:20