我当前使用数据网格工具栏(材料-UI数据网格组件的功能),因为我想要列显示/隐藏组件,但是我也想以Iconbutton的形式添加自己的菜单项,并在单击时打开菜单。问题是当您单击所述按钮时,工具栏似乎会重新渲染,这会导致菜单失去其锚并在左上方渲染。是否有一种特殊的方法可以在数据网格工具栏中获得播放器,以使菜单popper出现在正确的位置?

问题描述 投票:0回答:1

function CustomToolbar() { return ( <GridToolbarContainer> <Box height="65px" width="100%" display="flex" flexDirection="row" justifyContent="center" > <Box width="300px" display="flex" justifyContent="flex-start" alignItems="center"> <GridToolbarColumnsButton sx={{ ml: 2 }} /> </Box> <Box width="100%" alignSelf="center" textAlign="center"> <Typography sx={{ flex: "1 1 100%" }} variant="h6" component="div"> Title Goes Here </Typography> </Box> <Box width="300px" display="flex" justifyContent="flex-end" alignItems="center"> <Tooltip title="Filter"> <IconButton color="primary" component="span" disabled={loading} sx={{ mr: 2 }} onClick={handleMenuClick} > <FilterList /> </IconButton> </Tooltip> <Menu id="basic-menu" anchorEl={anchorEl} open={open} onClose={() => handleClose(menuState, filters)} transformOrigin={{ horizontal: "right", vertical: "top" }} anchorOrigin={{ horizontal: "right", vertical: "bottom" }} PaperProps={MenuProps} > <MenuItem /> //Clipped <MenuItem /> //Clipped <MenuItem /> //Clipped </Menu> </Box> </Box> </GridToolbarContainer> ); }

	
您必须在组件之外创建工具栏组件,以声明数据杂志,并通过DataGrid的ComponentsProps属性获取所需的属性。
gridtoolbarcustom组件:

reactjs material-ui datagrid mui-x-data-grid
1个回答
4
投票

type Props = { selectionModel: GridSelectionModel; } const GridToolbarCustom = ({ selectionModel }: Props) => { const [anchorElMenu, setAnchorElMenu] = useState<null | HTMLButtonElement>(null); const openMenu = Boolean(anchorElMenu); return ( <GridToolbarContainer> <Grid container item xs> {/* default buttons */} <GridToolbarColumnsButton /> <GridToolbarFilterButton /> <GridToolbarDensitySelector /> <GridToolbarExport /> </Grid> <Grid> <Button variant="contained" size="small" disabled={selectionModel.length === 0} startIcon={<MoreVertIcon />} onClick={(event: MouseEvent<HTMLButtonElement>) => { setAnchorElMenu(event.currentTarget); }} > Actions </Button> <Menu id="menu-options" anchorEl={anchorElMenu} open={openMenu} onClose={() => { setAnchorElMenu(null); }} > <MenuItem /> //Clipped <MenuItem /> //Clipped <MenuItem /> //Clipped </Menu> </Grid> </GridToolbarContainer> ); } export default GridToolbarCustom;

MyComponent:

import GridToolbarCustom from './GridToolbarCustom'; const MyComponent = () => { const [selectionModel, setSelectionModel] = useState<GridSelectionModel>([]); return ( <DataGrid //Clipped components={{ Toolbar: GridToolbarCustom, }} componentsProps={{ toolbar: { selectionModel, }, }} checkboxSelection onSelectionModelChange={(newSelectionModel) => { setSelectionModel(newSelectionModel); }} selectionModel={selectionModel} /> ); };


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.