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

React AG Grid保存选中行状态后行选中立即取消问题求助

问题原因及解决方案

1. 状态变量名拼写错误

你的状态变量初始化时存在拼写错误:selectedComaparisons(多了一个字母a),但更新状态使用的是setSelectedComparisons,这会导致状态无法正确同步,组件重新渲染时按钮的禁用状态判断失效,同时间接引发AG Grid选中状态异常。

修复代码:

// 修正状态变量名拼写
const [selectedComparisons, setSelectedComparisons] = useState([]);

按钮部分同步修正变量名:

<MotifButton
  onClick={() => {
    console.log(selectedComparisons);
  }}
  style={{ width: '220px', marginBottom: '50px'}}
  variant="secondary"
  disabled={selectedComparisons.length === 0}
>
  <MotifIcon
    src={actionIcDelete24px}
    style={{ width: '18px', marginRight: '4px' }}
  />
  Delete Comparisons
</MotifButton>

2. 组件重渲染导致AG Grid选中状态丢失

调用setSelectedComparisons更新状态时,组件会触发重渲染。如果AG Grid的核心配置(如rowData、columnDefs)未用useMemo包裹,每次渲染都会生成新的引用,导致AG Grid重新初始化,选中行被清空。

修复方案:
用useMemo包裹rowData和columnDefs,确保它们的引用稳定:

import { useMemo } from 'react';

// 包裹行数据,依赖项根据实际数据来源设置
const rowData = useMemo(() => [
  // 你的行数据内容
], [/* 行数据依赖的外部变量 */]);

// 包裹列定义,无外部依赖则留空数组
const columnDefs = useMemo(() => [
  { field: 'name' },
  { field: 'value' },
  // 其他列配置
], []);

// 渲染AG Grid时使用稳定的配置引用
<AgGridReact
  rowData={rowData}
  columnDefs={columnDefs}
  rowSelection="multiple" // 确保开启多行选择
  onSelectionChanged={handleSelectionChanged}
  // 其他AG Grid配置
/>

3. 确认AG Grid选择模式配置

确保AG Grid组件已设置rowSelection="multiple",否则无法正常启用多行选择,也会导致选中状态异常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:02:20