Skip to content

Commit 6502282

Browse files
authored
fix: update useList (#374)
* fix: update useList * feat(uselist): add mutate demo for functional or merge * fix(uselist): update autofix to sort these imports
1 parent 95f6817 commit 6502282

File tree

3 files changed

+113
-16
lines changed

3 files changed

+113
-16
lines changed

src/useList/demos/mutate.tsx

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import React from 'react';
2+
import { Button, Form, Input, Result, Select, Table } from 'antd';
3+
import { useList } from 'dt-react-component';
4+
import type { Fetcher } from 'dt-react-component/useList';
5+
6+
import getMockData, { type MockData } from './data';
7+
8+
const fetcher: Fetcher<MockData, { current: number; pageSize: number; search?: string }> = (
9+
params
10+
) => {
11+
return new Promise<{
12+
data: MockData[];
13+
total: number;
14+
}>((resolve) => {
15+
setTimeout(() => {
16+
resolve(getMockData(params));
17+
}, 150);
18+
});
19+
};
20+
21+
export default () => {
22+
const { error, params, loading, data, mutate } = useList(fetcher, { current: 1, pageSize: 20 });
23+
const [form] = Form.useForm();
24+
25+
if (error) return <Result status={500} />;
26+
27+
const handleSearch = async () => {
28+
const values = await form.validateFields();
29+
mutate({ ...values });
30+
};
31+
32+
const handleReset = async () => {
33+
form.resetFields();
34+
const values = await form.validateFields();
35+
// 当传入值有 undefined 的时候,采用 functional 的写法。
36+
// 因为底层使用的 lodash 的 merge,采用赋值写法不会对 undefined 做合并
37+
mutate((pre) => ({ ...pre, ...values }));
38+
};
39+
40+
return (
41+
<>
42+
<Form layout="inline" form={form}>
43+
<Form.Item name="search">
44+
<Input.Search style={{ marginBottom: 12, width: 228 }} />
45+
</Form.Item>
46+
<Form.Item name="filters">
47+
<Select style={{ width: 228 }} mode="multiple">
48+
<Select.Option key="female" value="female">
49+
female
50+
</Select.Option>
51+
<Select.Option key="male" value="male">
52+
male
53+
</Select.Option>
54+
</Select>
55+
</Form.Item>
56+
<Button type="ghost" style={{ marginRight: 16 }} onClick={handleReset}>
57+
重置
58+
</Button>
59+
<Button type="primary" onClick={handleSearch}>
60+
查询
61+
</Button>
62+
</Form>
63+
<Table
64+
loading={loading}
65+
columns={[
66+
{
67+
key: 'name',
68+
title: 'name',
69+
dataIndex: 'name',
70+
},
71+
{
72+
key: 'address',
73+
title: 'address',
74+
dataIndex: 'address',
75+
},
76+
{
77+
key: 'company',
78+
title: 'company',
79+
dataIndex: 'company',
80+
},
81+
{
82+
key: 'gender',
83+
title: 'gender',
84+
dataIndex: 'gender',
85+
},
86+
{
87+
key: 'weight',
88+
title: 'weight',
89+
dataIndex: 'weight',
90+
},
91+
]}
92+
onChange={(pagination) =>
93+
mutate({ current: pagination.current, pageSize: pagination.pageSize })
94+
}
95+
size="small"
96+
scroll={{ y: 200 }}
97+
dataSource={data}
98+
pagination={{
99+
current: params.current,
100+
pageSize: params.pageSize,
101+
total: params.total,
102+
}}
103+
rowKey="uuid"
104+
bordered
105+
/>
106+
</>
107+
);
108+
};

src/useList/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ toc: content
1515
<code src="./demos/basic.tsx" title="基础使用"></code>
1616
<code src="./demos/sort.tsx" title="筛选和过滤"></code>
1717
<code src="./demos/options.tsx" title="相关配置" description="设置 immediate 值防止初始化的时候进行请求"></code>
18+
<code src="./demos/mutate.tsx" title="相关配置" description="用 undefined 覆盖 prevPrams 时,需采用 functional 的写法 "></code>
1819

1920
## API
2021

src/useList/index.ts

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -49,23 +49,11 @@ export default function useList<T extends Record<string, any>, P extends Record<
4949
};
5050
const nextOptions = merge(defaultOptions, options);
5151

52-
if (typeof next === 'function') {
53-
setParams((prev) => {
54-
const tmp = next(prev);
52+
const tmp = typeof next === 'function' ? next(params) : { ...merge({}, params, next) };
53+
setParams(tmp);
5554

56-
if (nextOptions.revalidate) {
57-
performFetch(tmp);
58-
}
59-
60-
return tmp;
61-
});
62-
} else {
63-
const tmp = { ...merge({}, params, next) };
64-
setParams(tmp);
65-
66-
if (nextOptions.revalidate) {
67-
performFetch(tmp);
68-
}
55+
if (nextOptions.revalidate) {
56+
performFetch(tmp);
6957
}
7058
};
7159

0 commit comments

Comments
 (0)