如何解决在 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,当数据改变导致选区改变或网格重新渲染时,手动设置选区。
-
定义缓存选定项的状态,并将选定项存储在更改事件中:
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}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。