Skip to content

Commit c118825

Browse files
optimize react router pagination functions
1 parent 9a19a34 commit c118825

1 file changed

Lines changed: 44 additions & 32 deletions

File tree

src/reactRouterPagination.tsx

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useMemo } from 'react'
1+
import { useCallback, useMemo } from 'react'
22
import { useHistory, useLocation, useRouteMatch } from 'react-router-dom'
33

44
import { UseSearchAndPagination } from './types'
@@ -11,42 +11,54 @@ export function useSearchAndPagination(): UseSearchAndPagination {
1111

1212
const params = useMemo(() => new URLSearchParams(routeQuery), [routeQuery])
1313

14+
const search = useCallback(
15+
(query: string) => {
16+
if (query === '') {
17+
params.delete('search')
18+
} else {
19+
params.set('search', query)
20+
}
21+
params.delete('page')
22+
params.delete('size')
23+
24+
routerHistory.push({
25+
pathname: routerUrl,
26+
search: params.toString(),
27+
})
28+
},
29+
[routerHistory, params]
30+
)
31+
32+
const clear = useCallback(() => {
33+
params.delete('search')
34+
params.delete('page')
35+
params.delete('size')
36+
37+
routerHistory.push({
38+
pathname: routerUrl,
39+
search: params.toString(),
40+
})
41+
}, [routerHistory, params])
42+
43+
const setPage = useCallback(
44+
(page: number) => {
45+
params.set('page', page.toString())
46+
routerHistory.push({
47+
pathname: routerUrl,
48+
search: params.toString(),
49+
})
50+
},
51+
[routerHistory, params]
52+
)
53+
1454
return {
1555
search: params.get('search') || '',
1656
page: convert(params.get('page'), 0),
1757
size: convert(params.get('size'), 15),
1858
actions: {
19-
search: (query: string) => {
20-
if (query === '') {
21-
params.delete('search')
22-
} else {
23-
params.set('search', query)
24-
}
25-
params.delete('page')
26-
params.delete('size')
27-
28-
routerHistory.push({
29-
pathname: routerUrl,
30-
search: params.toString(),
31-
})
32-
},
33-
clear: () => {
34-
params.delete('search')
35-
params.delete('page')
36-
params.delete('size')
37-
38-
routerHistory.push({
39-
pathname: routerUrl,
40-
search: params.toString(),
41-
})
42-
},
43-
setPage: (page: number) => {
44-
params.set('page', page.toString())
45-
routerHistory.push({
46-
pathname: routerUrl,
47-
search: params.toString(),
48-
})
49-
},
59+
search,
60+
clear,
61+
setPage,
5062
},
5163
}
5264
}

0 commit comments

Comments
 (0)