protable在切换tab之后,出现params有之前搜索框的缓存的解决方法。

protable在切换select框之后,search表单的参数依旧存在的缓存问题

在这里插入图片描述

如上,在切换左边的下拉框之后,protable会重新请求,并带上下拉框里面选择的值。下拉框里的值比较简单,只要在onChange事件中setState就行,然后在protable的组件上在params={{}}里传进去,只要setstate,protable的request就会重新请求。

这里有个问题就是如果最左边seach点击了某个选项,我再去切换select之后就会出现一个问题,search的参数,会被保留下来。在我切换左边的下拉框的时候,请求里面带了脏参数。

解决思路如下
  1. 在切换tab之后先去清除search框的默认选中的数据,首先要获取formRef
    formRef.current?.resetFields() //清除默认表单数据; formRef.current?.submit();//将数据提交

2.这里要注意一个问题,切换tab之后的顺序(是个坑)

  <Select
                options={options}
                onChange={(value) => {
                  setSelectedRowKeys([]);
                  setSelectRow([]);
                  setVideoType(value);
                  if (actionRef?.current?.reloadAndRest) {
                    actionRef?.current?.reloadAndRest();
                  }
                  formRef.current?.resetFields();
                  formRef.current?.submit();
                }}
              />
                       <ProTable<tableColConfig>
        columns={columns}
        actionRef={actionRef}
        formRef={formRef}
        options={false}
        params={{ pageType, videoType }}

这里要注意一件事
1.切换select之后的改变的数据state是存在于protable的params里的。切换了select框是会重新请求的。

2.我的最初想法是,清除搜索框和.reloadAndRest之后再去setState方法。这里有问题。在setState之后,表格会重新请求,其实走的是表格的reload方法,他会拿取上一次params里的参数,所以你先清除表单在去走settype,参数依旧没有清除。

3.要先去setState方法之后,再去执行清除默认参数的方法。在使用reloadAndRest()方法之前要先判断是否存在,因为在protable的actionRecf上的泛型定义上,reloadAndRest是可选的。

4.要注意新版本的protable上,有些方法是弃用了,protable居然是直接在泛型上用Omit给排除掉了。。。,文档没修改。。这我确实没想到。。。

多选代码加反显截图

<ProTable<tableColConfig>
	            columns={columns}
	            actionRef={actionRef}
	            formRef={formRef}
	            options={false}
	            params={{ pageType, videoType }}
	            rowSelection={{
	              selectedRowKeys,
	              hideSelectAll: true,
	              defaultSelectedRowKeys: selectedRowKeys,
	              onSelect: (record, selected) => {
	                let arr: any[] = [];
	                if (selected) {
	                  // 如果选中,加入selectedRowKeys
	                  if (selectedRowKeys.length < 6) {
	                    //判断是否选择
	                    rowSelect(record); //选中之后走得拿到的数据
	                    arr = Array.from(new Set([...selectedRowKeys, record.id]));
	                  } else {
	                    message.info('选中的项目不能超过6个');
	                    arr = Array.from(new Set([...selectedRowKeys]));
	                  }
	                } else {
	                  // 如果未选中,删除这一项数据
	                  arr = selectedRowKeys.filter((item) => {
	                    return item !== record.id;
	                  });
	                  const arrSec = selectRow.filter((item) => {
	                    return item.sxtzbId !== record.id;
	                  });
	                  setSelectRow(arrSec);
	                }
	                setSelectedRowKeys(arr);
	              },
	            }}
	            tableAlertOptionRender={false}
	            tableAlertRender={() => (
	              <Space size={24}>
	                <span>
	                  已选 {selectedRowKeys.length}<a
	                    style={{ marginLeft: 8 }}
	                    onClick={() => {
	                      setSelectedRowKeys([]);
	                      setSelectRow([]);
	                    }}
	                  >
	                    取消选择
	                  </a>
	                </span>
	              </Space>
	            )}
	            rowKey="id"
	            search={{
	              labelWidth: 'auto',
	              searchText: '搜索',
	              resetText: '清空搜索',
	              span: 8,
	            }}
	            pagination={{
	              pageSize: 10,
	            }}
	          />
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值