微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 DetailsList 中使用 fluentui/React 在分页之间保持选择

如何解决在 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,当数据改变导致选区改变或网格重新渲染时,手动设置选区。

  1. 定义缓存选定项的状态,并将选定项存储在更改事件中:

     const [selectedItems,setSelectedItems] = useState<Array<IObjectWithKey> | undefined>(undefined)
     const [selection] = useState(new Selection({
         onSelectionChanged: () => {
             setSelectedItems(selection.getSelection());
         }
     }));
    
  2. 在任何重新渲染触发后手动设置所选项目,记得关闭事件以避免无限循环:

     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]);
    
  3. 通过传递selection={selection}

    将选择绑定到详细列表

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。