|
@@ -1,4 +1,4 @@
|
1
|
|
-import React, { useCallback, useState, useEffect, useImperativeHandle } from 'react';
|
|
1
|
+import React, { useCallback, useRef, useState, useEffect, useImperativeHandle } from 'react';
|
2
|
2
|
import { stringify } from 'querystring';
|
3
|
3
|
import { notification } from 'antd';
|
4
|
4
|
import request from '@/utils/request'
|
|
@@ -7,56 +7,69 @@ import Pagination from './Pagination';
|
7
|
7
|
|
8
|
8
|
export default React.forwardRef((props, ref) => {
|
9
|
9
|
const [loading, setLoading] = useState(false)
|
10
|
|
- const [pageConfig, setPageConfig] = useState({ current: 1, pageSize: 10, total: 0 })
|
|
10
|
+ const mounted = useRef(false)
|
11
|
11
|
const [list, setList] = useState()
|
12
|
|
- const { api, params = {}, onPageChange, ...tableProps } = props
|
13
|
|
- const paramsStr = stringify({
|
14
|
|
- ...params,
|
15
|
|
- pageNum: pageConfig.current,
|
16
|
|
- pageSize: pageConfig.pageSize,
|
17
|
|
- })
|
18
|
|
-
|
19
|
|
- const updatePageConfig = useCallback((config) => {
|
20
|
|
- const newPage = {
|
21
|
|
- ...pageConfig,
|
22
|
|
- ...config,
|
23
|
|
- }
|
24
|
|
-
|
25
|
|
- setPageConfig(newPage)
|
|
12
|
+ const [pageTotal, setPageTotal] = useState(0)
|
|
13
|
+ const [pageConfig, setPageConfig] = useState({ current: 1, pageSize: 10 })
|
26
|
14
|
|
27
|
|
- if (onPageChange) {
|
28
|
|
- onPageChange(newPage)
|
29
|
|
- }
|
30
|
|
- }, [pageConfig])
|
|
15
|
+ const { api, params = {}, onPageChange, ...tableProps } = props
|
31
|
16
|
|
32
|
|
- const handlePageChange = (current, pageSize) => {
|
33
|
|
- const config = pageSize ? { current, pageSize } : { current }
|
34
|
|
- updatePageConfig(config)
|
35
|
|
- }
|
|
17
|
+ // 更新分页
|
|
18
|
+ const updatePage = useCallback(
|
|
19
|
+ (current, pageSize) => {
|
|
20
|
+ const config = pageSize ? { current, pageSize } : { current }
|
|
21
|
+ const newPage = {
|
|
22
|
+ ...pageConfig,
|
|
23
|
+ ...config,
|
|
24
|
+ }
|
|
25
|
+
|
|
26
|
+ setPageConfig(newPage)
|
|
27
|
+ if (onPageChange) {
|
|
28
|
+ onPageChange(newPage)
|
|
29
|
+ }
|
|
30
|
+ },
|
|
31
|
+ [pageConfig],
|
|
32
|
+ )
|
36
|
33
|
|
37
|
34
|
// 获取远程数据
|
38
|
35
|
const fetchData = useCallback(
|
39
|
36
|
() => {
|
40
|
|
- const url = `${api.url}?${paramsStr}`
|
41
|
37
|
setLoading(true)
|
42
|
|
- request({...api, url}).then((res) => {
|
43
|
|
- const {current, total, records = []} = res
|
|
38
|
+ const queryParams = {
|
|
39
|
+ ...params,
|
|
40
|
+ pageNum: pageConfig.current,
|
|
41
|
+ pageSize: pageConfig.pageSize,
|
|
42
|
+ }
|
|
43
|
+ request({...api, params: queryParams }).then((res) => {
|
|
44
|
+ const {total, records = []} = res
|
44
|
45
|
setLoading(false)
|
45
|
46
|
setList(records)
|
46
|
|
- updatePageConfig({current, total})
|
|
47
|
+ setPageTotal(total)
|
47
|
48
|
}).catch((err) => {
|
48
|
49
|
console.error(err)
|
49
|
50
|
setLoading(false)
|
50
|
51
|
notification.warn({ message: err.message })
|
51
|
52
|
})
|
52
|
53
|
},
|
53
|
|
- [paramsStr, api],
|
|
54
|
+ [params, pageConfig, api],
|
54
|
55
|
)
|
55
|
56
|
|
56
|
57
|
// 监控查询参数的修改
|
57
|
58
|
useEffect(() => {
|
|
59
|
+ // 通过更新分页来触发查询
|
|
60
|
+ updatePage(1)
|
|
61
|
+ }, [params])
|
|
62
|
+
|
|
63
|
+ // 监控分页的修改
|
|
64
|
+ useEffect(() => {
|
|
65
|
+ // 首次加载不查询
|
|
66
|
+ if (!mounted.current) {
|
|
67
|
+ mounted.current = true
|
|
68
|
+ return
|
|
69
|
+ }
|
|
70
|
+
|
58
|
71
|
fetchData()
|
59
|
|
- }, [paramsStr])
|
|
72
|
+ }, [pageConfig])
|
60
|
73
|
|
61
|
74
|
// 透传给父组件部分方法
|
62
|
75
|
useImperativeHandle(ref, () => ({
|
|
@@ -66,7 +79,7 @@ export default React.forwardRef((props, ref) => {
|
66
|
79
|
return (
|
67
|
80
|
<>
|
68
|
81
|
<TableList loading={loading} dataSource={list} {...tableProps} />
|
69
|
|
- <Pagination {...pageConfig} onChange={handlePageChange} />
|
|
82
|
+ <Pagination {...pageConfig} total={pageTotal} onChange={updatePage} />
|
70
|
83
|
</>
|
71
|
84
|
)
|
72
|
85
|
});
|