如何通过API调用设置agRichSelectCellEditor可选值?useState/useEffect失效问题
解决Ag Grid agRichSelectCellEditor动态加载API数据失效问题
问题原因
Ag Grid的列配置默认是静态的,当通过useState更新数据后,列定义不会自动触发重新渲染,导致编辑器无法获取最新的data值。另外你的useState类型声明有误,数组类型应该是string[]而非string。
修复步骤
修正useState类型
把数组类型声明正确:const [data, setData] = useState<string[]>([])正确发起API请求并更新状态
在useEffect中调用API并设置数据:useEffect(() => { // 替换为你的实际API地址 fetch('/api/languages') .then(response => response.json()) .then(apiData => setData(apiData)) .catch(error => console.error('加载语言列表失败:', error)) }, [])用useMemo绑定列定义与data
通过useMemo让列定义依赖data,当data更新时自动重新生成列配置:const columnDefs = useMemo(() => [ { headerName: '语言', field: 'language', cellEditor: 'agRichSelectCellEditor', singleClickEdit: true, editable: true, cellEditorParams: { values: data } } // 其他列配置... ], [data])在AgGrid组件中使用动态列定义
<AgGridReact columnDefs={columnDefs} rowData={yourRowData} // 其他必要配置(如rowSelection、pagination等) />
额外提示
如果API请求耗时较长,可添加加载状态,比如在data为空时给编辑器设置默认提示值,避免编辑器无选项:
cellEditorParams: { values: data.length > 0 ? data : ['加载中...'] }
内容的提问来源于stack exchange,提问作者Bate
相关产品推荐
相关产品推荐

