张延森 4 years ago
parent
commit
e9efcd1500
1 changed files with 44 additions and 31 deletions
  1. 44
    31
      src/components/TableList/index.jsx

+ 44
- 31
src/components/TableList/index.jsx View File

1
-import React, { useCallback, useState, useEffect, useImperativeHandle } from 'react';
1
+import React, { useCallback, useRef, useState, useEffect, useImperativeHandle } from 'react';
2
 import { stringify } from 'querystring';
2
 import { stringify } from 'querystring';
3
 import { notification } from 'antd';
3
 import { notification } from 'antd';
4
 import request from '@/utils/request'
4
 import request from '@/utils/request'
7
 
7
 
8
 export default React.forwardRef((props, ref) => {
8
 export default React.forwardRef((props, ref) => {
9
   const [loading, setLoading] = useState(false)
9
   const [loading, setLoading] = useState(false)
10
-  const [pageConfig, setPageConfig] = useState({ current: 1, pageSize: 10, total: 0 })
10
+  const mounted = useRef(false)
11
   const [list, setList] = useState()
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
   const fetchData = useCallback(
35
   const fetchData = useCallback(
39
     () => {
36
     () => {
40
-      const url = `${api.url}?${paramsStr}`
41
       setLoading(true)
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
         setLoading(false)
45
         setLoading(false)
45
         setList(records)
46
         setList(records)
46
-        updatePageConfig({current, total})
47
+        setPageTotal(total)
47
       }).catch((err) => {
48
       }).catch((err) => {
48
         console.error(err)
49
         console.error(err)
49
         setLoading(false)
50
         setLoading(false)
50
         notification.warn({ message: err.message })
51
         notification.warn({ message: err.message })
51
       })
52
       })
52
     },
53
     },
53
-    [paramsStr, api],
54
+    [params, pageConfig, api],
54
   )
55
   )
55
 
56
 
56
   // 监控查询参数的修改
57
   // 监控查询参数的修改
57
   useEffect(() => {
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
     fetchData()
71
     fetchData()
59
-  }, [paramsStr])
72
+  }, [pageConfig])
60
 
73
 
61
   // 透传给父组件部分方法
74
   // 透传给父组件部分方法
62
   useImperativeHandle(ref, () => ({
75
   useImperativeHandle(ref, () => ({
66
   return (
79
   return (
67
     <>
80
     <>
68
       <TableList loading={loading} dataSource={list} {...tableProps} />
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
 });