张延森 4 jaren geleden
bovenliggende
commit
e9efcd1500
1 gewijzigde bestanden met toevoegingen van 44 en 31 verwijderingen
  1. 44
    31
      src/components/TableList/index.jsx

+ 44
- 31
src/components/TableList/index.jsx Bestand weergeven

@@ -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
 });