reactjs - 在 DetailsList 中使用 fluentui/React 保持分页之间的选择
问题描述
如何在 fluentui/React 中的 DataList 中保持分页之间的选择
<DetailsList
items={items}
compact={true}
columns={columns}
selectionMode={SelectionMode.multiple}
getKey={getKey}
setKey="none"
layoutMode={DetailsListLayoutMode.justified}
isHeaderVisible={true}
onItemInvoked={onItemInvoked}
/>
解决方案
我已经管理了其他一些重新渲染事件之间的选择,我认为解决方案应该是兼容的。
基本思路是自己存储选中的item,当selection发生变化或者因为数据变化导致grid重新渲染时,手动设置selection。
定义缓存选定项的状态,并将选定项存储在更改事件中:
const [selectedItems, setSelectedItems] = useState<Array<IObjectWithKey> | undefined>(undefined) const [selection] = useState(new Selection({ onSelectionChanged: () => { setSelectedItems(selection.getSelection()); } }));
在任何重新渲染触发后手动设置选定的项目,记住关闭事件以避免无限循环:
useEffect(() => { var preSelected = getSelectedChildren(selectedItems); if (preSelected.length > 0) { selection.setChangeEvents(false); itemList.forEach(item => { selection.setKeySelected(item.key.toString(), preSelected.findIndex(s => s.key === item.key) >= 0, true); }); selection.setChangeEvents(true); } reloadState(getSelectedChildren(selectedItems)); }, [itemList, selectedItems]);
通过传递将选择绑定到详细列表
selection={selection}
推荐阅读
- c# - 使用 MSGraph .NET SDK 在其他租户中读取电子邮件的身份验证流程
- android - 如何根据用户在Android Studio(Java)中输入的条件显示可绘制对象
- javascript - 异步等待不适用于 html2pdf 命令
- php - 如果在类的公共方法中未引发异常,我如何重置私有实例变量?
- android - 如何将 apk 大小减小到 100MB 以下
- next.js - next-connect TypeError: handlers[(i++)] is not a function
- reactjs - 当我将数据从 useEffect 传递到 react-select 下拉菜单时,显示选项,但默认值不是
- aws-codecommit - 将代码库存储库镜像到 AWS Codecommit
- cp - 从没有特定文件类型的子目录复制所有文件,保持目录结构
- visual-studio-code - 在 WSL 上制作的名为“space”的目录导致更新失败