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

如何通过API调用设置agRichSelectCellEditor可选值?useState/useEffect失效问题

解决Ag Grid agRichSelectCellEditor动态加载API数据失效问题

问题原因

Ag Grid的列配置默认是静态的,当通过useState更新数据后,列定义不会自动触发重新渲染,导致编辑器无法获取最新的data值。另外你的useState类型声明有误,数组类型应该是string[]而非string。

修复步骤

  1. 修正useState类型
    把数组类型声明正确:

    const [data, setData] = useState<string[]>([])
    
  2. 正确发起API请求并更新状态
    在useEffect中调用API并设置数据:

    useEffect(() => {
      // 替换为你的实际API地址
      fetch('/api/languages')
        .then(response => response.json())
        .then(apiData => setData(apiData))
        .catch(error => console.error('加载语言列表失败:', error))
    }, [])
    
  3. 用useMemo绑定列定义与data
    通过useMemo让列定义依赖data,当data更新时自动重新生成列配置:

    const columnDefs = useMemo(() => [
      {
        headerName: '语言',
        field: 'language',
        cellEditor: 'agRichSelectCellEditor',
        singleClickEdit: true,
        editable: true,
        cellEditorParams: {
          values: data
        }
      }
      // 其他列配置...
    ], [data])
    
  4. 在AgGrid组件中使用动态列定义

    <AgGridReact
      columnDefs={columnDefs}
      rowData={yourRowData}
      // 其他必要配置(如rowSelection、pagination等)
    />
    

额外提示

如果API请求耗时较长,可添加加载状态,比如在data为空时给编辑器设置默认提示值,避免编辑器无选项:

cellEditorParams: {
  values: data.length > 0 ? data : ['加载中...']
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:22:37