Reactjs 材质UI X网格:隐藏&;重新渲染时,已排序列将返回默认值

Reactjs 材质UI X网格:隐藏&;重新渲染时,已排序列将返回默认值,reactjs,datagrid,material-ui,Reactjs,Datagrid,Material Ui,我在动态UI中使用Material UI X Grid,数据更新频率约为1Hz。当页面使用新数据重新呈现时,任何已排序或隐藏的列都将返回其默认值,即隐藏列将再次显示,列将重新排序到其默认位置。有没有办法停止此行为并保持用户选择的状态?我搜索了API文档和Material UI的支持页面,但没有找到任何结果。我得到了Material UI团队的支持,并在这里提供答案,以防它能帮助其他人 问题是我需要通过useState()钩子在组件外部维护columns prop。下面列出了对我有用的基本知识 功

我在动态UI中使用Material UI X Grid,数据更新频率约为1Hz。当页面使用新数据重新呈现时,任何已排序或隐藏的列都将返回其默认值,即隐藏列将再次显示,列将重新排序到其默认位置。有没有办法停止此行为并保持用户选择的状态?我搜索了API文档和Material UI的支持页面,但没有找到任何结果。

我得到了Material UI团队的支持,并在这里提供答案,以防它能帮助其他人

问题是我需要通过useState()钩子在组件外部维护columns prop。下面列出了对我有用的基本知识

功能表(道具){

const[cols,setCols]=useState([]);
const[cols_loaded,setColsLoaded]=useState(false);
如果(!cols_已加载){
setCols(funcToReturnCols());
}
const data={columns:cols,rows:getRows(props)};
内容=
;
返回内容;
}

文档中确实提到了应该在组件之外维护列,目的是让它们只包含一次,这更聪明

从上面的链接中可以看到:“columns prop应该在两个渲染之间保持相同的引用。这些列被设计为定义,在安装组件后永远不会更改。否则,您可能会丢失列宽状态(如果调整了大小)。您可以在渲染函数外创建数组或将其记忆。”

const [cols, setCols] = useState([]);
const [cols_loaded, setColsLoaded] = useState(false);

if(!cols_loaded){
    setCols(funcToReturnCols());
}

const data = {columns: cols, rows: getRows(props)};

content = <div className="data-table">
            <XGrid
                {...data}
                loading={data.rows.length === 0}
                rowHeight={30}
                autoHeight={true}
                disableColumnMenu={true}
                density={"compact"}
                components={{
                    Toolbar: GridToolbar,
                  }}
            />
        </div>
 ;

 return content;