是否可以在数据网格中只允许一个扩展行?
Is it possible to allow only one expanded row in a datagrid?
我只想允许我的用户一次展开一行。使用默认的 Datagrid,您可以根据需要扩展任意多的行,增加垂直 space,同时增加屏幕上显示的数据量。
假设没有默认设置(我还没有找到),我认为实现这一目标的唯一方法是手动调整 Redux 存储中的状态。我可以在这里看到 redux 存储中的状态:
我在 Redux 方面很弱,我不确定确保“扩展”数组中只有一个值的最佳方法。有没有人有任何想法让我尝试?提前致谢!
我通过反复试验找到解决方案让自己感到惊讶。基本上我使用 useSelector 来获取列表中展开的内容的状态,然后设置一个效果来监视该数组何时发生变化。如果数组大于一个,我只需使用 useDispatch 切换数组中的第一项。
代码片段:
const expanded = useSelector(state =>
state.admin.resources.PackageInfo.list.expanded
);
const dispatch = useDispatch();
useEffect(() => {
if(expanded.length > 1)
dispatch(toggleListItemExpand('PackageInfo', expanded[0]));
}, [expanded]);
我很想得到关于此的任何反馈,我不确定自定义发货到商店的副作用或后果是什么。我想明天我会尝试将它扩展成一个可重复使用的挂钩,我可以在我的所有列表中使用它。
编辑:
我确实将它移到了一个挂钩中,现在它可以在多个列表中使用。这是完整的钩子:
import { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import { toggleListItemExpand } from "react-admin";
const useExpandOnlyOne = (resource) => {
const expanded = useSelector(
(state) => state.admin.resources[resource].list.expanded
);
const dispatch = useDispatch();
useEffect(() => {
if (expanded.length > 1)
dispatch(toggleListItemExpand(resource, expanded[0]));
}, [expanded]);
};
export default useExpandOnlyOne;
我只是在我的顶级列表中这样称呼它:
const PackageList = (props) => {
useExpandOnlyOne(props.resource);
....
我只想允许我的用户一次展开一行。使用默认的 Datagrid,您可以根据需要扩展任意多的行,增加垂直 space,同时增加屏幕上显示的数据量。
假设没有默认设置(我还没有找到),我认为实现这一目标的唯一方法是手动调整 Redux 存储中的状态。我可以在这里看到 redux 存储中的状态:
我在 Redux 方面很弱,我不确定确保“扩展”数组中只有一个值的最佳方法。有没有人有任何想法让我尝试?提前致谢!
我通过反复试验找到解决方案让自己感到惊讶。基本上我使用 useSelector 来获取列表中展开的内容的状态,然后设置一个效果来监视该数组何时发生变化。如果数组大于一个,我只需使用 useDispatch 切换数组中的第一项。
代码片段:
const expanded = useSelector(state =>
state.admin.resources.PackageInfo.list.expanded
);
const dispatch = useDispatch();
useEffect(() => {
if(expanded.length > 1)
dispatch(toggleListItemExpand('PackageInfo', expanded[0]));
}, [expanded]);
我很想得到关于此的任何反馈,我不确定自定义发货到商店的副作用或后果是什么。我想明天我会尝试将它扩展成一个可重复使用的挂钩,我可以在我的所有列表中使用它。
编辑:
我确实将它移到了一个挂钩中,现在它可以在多个列表中使用。这是完整的钩子:
import { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import { toggleListItemExpand } from "react-admin";
const useExpandOnlyOne = (resource) => {
const expanded = useSelector(
(state) => state.admin.resources[resource].list.expanded
);
const dispatch = useDispatch();
useEffect(() => {
if (expanded.length > 1)
dispatch(toggleListItemExpand(resource, expanded[0]));
}, [expanded]);
};
export default useExpandOnlyOne;
我只是在我的顶级列表中这样称呼它:
const PackageList = (props) => {
useExpandOnlyOne(props.resource);
....