如何在Material-UI的DataGrid中动态设置singleSelect列的valueOptions
解决方案
可以实现,免费版Material-UI DataGrid的列配置本身支持响应式更新,你可以按照以下步骤操作:
- 将导入的原始列定义存入组件state,把DataGrid渲染的columns属性绑定该state值
- 拉取到当前用户的country选项后,更新country列的valueOptions配置,再更新state即可生效
代码示例
// 从单独文件导入原始列定义 import { originalColumns } from './your-column-def-file'; import { DataGrid } from '@mui/x-data-grid'; import { useState, useEffect } from 'react'; function YourDataGridComponent() { // 存储列配置的state const [columns, setColumns] = useState(originalColumns); // 存储表格行数据,此处省略其他表格基础逻辑 const [rows, setRows] = useState([]); useEffect(() => { // 登录后拉取当前用户的country下拉选项 const fetchCountryOptions = async () => { const res = await fetch('/api/user/country-options'); const optionList = await res.json(); // 生成新的列配置副本,更新country列的valueOptions const updatedColumns = originalColumns.map(column => { if (column.field === 'country') { return { ...column, valueOptions: optionList }; } return column; }); // 更新列配置state,DataGrid会自动读取新的配置 setColumns(updatedColumns); }; fetchCountryOptions(); }, []); return ( <div style={{ height: 600, width: '100%' }}> <DataGrid rows={rows} columns={columns} // 其他DataGrid配置项 /> </div> ); }
注意:不要直接修改原始导入的列定义数组,必须生成新的数组副本更新state,才能触发React的重渲染逻辑,列配置才会生效。
内容的提问来源于stack exchange,提问作者Raihan Dewana
相关产品推荐
相关产品推荐

