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

React TS中AG Grid 27社区版如何设置容器宽度自适应?

解决AG Grid 27社区版自适应容器宽度问题

要实现大屏时容器仅占用列所需宽度、小屏时支持横向滚动的效果,需结合容器样式调整与AG Grid配置修改,具体方案如下:

1. 调整容器样式

修改包裹AG Grid的div样式,核心是让容器宽度由内容决定而非强制占满父容器:

const gridStyle = useMemo(() => ({
  height: '100%',
  width: 'auto',
  overflowX: 'auto',
  display: 'inline-block', // 关键:切换为行内块级元素,宽度跟随内容变化
  maxWidth: '100%' // 限制容器最大宽度为屏幕宽度,触发小屏横向滚动
}), []);

原样式中width: auto在块级元素下仍会占满父容器宽度,添加display: inline-block后,容器宽度将匹配内部AG Grid的实际宽度;maxWidth: 100%确保表格总宽度超出屏幕时,容器自动启用横向滚动。

2. 配置AG Grid并实现列宽自适应

通过AG Grid的API调用列宽适配方法,确保表格总宽度匹配列内容需求:

import { AgGridReact } from 'ag-grid-react';
import { useRef, useEffect } from 'react';

// 创建AG Grid的ref用于调用API
const gridRef = useRef<AgGridReact>(null);

// 组件挂载、数据更新或窗口 resize时,调整列宽适配内容
useEffect(() => {
  const gridApi = gridRef.current?.api;
  if (!gridApi) return;

  // 让列宽自动适配内容,表格总宽度为所有列宽度之和
  gridApi.sizeColumnsToFit();

  // 监听窗口 resize,重新调整列宽
  const handleResize = () => gridApi.sizeColumnsToFit();
  window.addEventListener('resize', handleResize);
  return () => window.removeEventListener('resize', handleResize);
}, [rowData, columnDefs]);

// JSX结构
<div style={gridStyle} className="ag-theme-alpine">
  <AgGridReact
    ref={gridRef}
    rowData={rowData}
    columnDefs={columnDefs}
    suppressScrollOnNewData={true} // 避免数据更新时自动滚动
  />
</div>

3. 可选:固定部分列宽度

若需指定部分列的固定宽度,可在columnDefs中单独设置width、minWidth或maxWidth,sizeColumnsToFit()会优先遵循这些配置,仅调整未指定宽度的列。

最终效果:

  • 大屏且列数较少时,容器宽度匹配表格实际宽度,无右侧留白
  • 小屏或列总宽度超出屏幕时,容器自动显示横向滚动条,保证内容可完整浏览

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:03:08