protable在切换select框之后,search表单的参数依旧存在的缓存问题
如上,在切换左边的下拉框之后,protable会重新请求,并带上下拉框里面选择的值。下拉框里的值比较简单,只要在onChange事件中setState就行,然后在protable的组件上在params={{}}里传进去,只要setstate,protable的request就会重新请求。
这里有个问题就是如果最左边seach点击了某个选项,我再去切换select之后就会出现一个问题,search的参数,会被保留下来。在我切换左边的下拉框的时候,请求里面带了脏参数。
解决思路如下
- 在切换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,
}}
/>