Skip to content

Commit cee98c7

Browse files
committed
Parameterized the useQuery react-query hook - recreate useEffect.
Added custom prevPage, nextPage.
1 parent 56ff327 commit cee98c7

File tree

4 files changed

+58
-43
lines changed

4 files changed

+58
-43
lines changed

package-lock.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"react-dom": "^16.13.1",
99
"react-loading-skeleton": "^2.1.1",
1010
"react-query": "^2.8.0",
11+
"react-query-devtools": "^2.4.4",
1112
"react-scripts": "3.4.3",
1213
"react-table": "^7.5.0"
1314
},

src/App.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import React from 'react'
2-
import './App.css'
2+
import { ReactQueryDevtools } from 'react-query-devtools'
3+
34
import ReactTable from './components/ReactTable'
45

56
function App() {
67
return (
78
<div className = 'App'>
89
<ReactTable />
10+
<ReactQueryDevtools />
911
</div>
1012
)
1113
}

src/components/ReactTable.js

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
1-
import React, { useMemo } from 'react'
1+
import React, { useMemo, useState } from 'react'
22
import Skeleton from 'react-loading-skeleton'
33
import axios from 'axios'
4-
import {useQuery} from 'react-query'
4+
import { useQuery } from 'react-query'
55
import { useTable, usePagination } from 'react-table'
66

77
import './ReactTable.css'
88

9-
// const PAGE_SIZE = 10
10-
11-
const PeopleTable = ({
12-
columns,
13-
}) => {
9+
const fetchPeople = async (key, pageIndex) => {
10+
let peopleList = await axios.get(
11+
`https://swapi.dev/api/people/?page=${pageIndex + 1}`,
12+
)
13+
return peopleList
14+
}
1415

15-
const {data: peopleList, isLoading, } = useQuery('fetchPeople', fetchPeople)
16+
const PeopleTable = ({ columns }) => {
17+
const [pageIndex, setPageIndex] = useState(0)
18+
const { data: peopleList, isLoading } = useQuery(
19+
['fetchPeople', pageIndex],
20+
fetchPeople,
21+
)
1622

1723
const {
1824
getTableProps,
1925
getTableBodyProps,
2026
headerGroups,
2127
page,
2228
prepareRow,
23-
canPreviousPage,
24-
canNextPage,
25-
pageCount,
26-
gotoPage,
27-
nextPage,
28-
previousPage,
2929
pageOptions,
30-
state: { pageIndex, pageSize },
3130
} = useTable(
3231
{
3332
columns,
@@ -38,6 +37,16 @@ const PeopleTable = ({
3837
usePagination,
3938
)
4039

40+
const previousPagePossible = () => {
41+
if(pageIndex === 0) return true
42+
return false
43+
}
44+
45+
const nextPagePossible = () => {
46+
if(pageIndex === pageOptions.length) return true
47+
return false
48+
}
49+
4150
return (
4251
<div className = 'people-table'>
4352
<table { ...getTableProps() }>
@@ -81,25 +90,16 @@ const PeopleTable = ({
8190
{!isLoading && (
8291
<div className = 'pagination'>
8392
<button
84-
disabled = { !canPreviousPage }
85-
onClick = { () => gotoPage(0) }
86-
>
87-
{'<<'}
88-
</button>{' '}
89-
<button
90-
disabled = { !canPreviousPage }
91-
onClick = { () => previousPage() }
93+
disabled = { previousPagePossible() }
94+
onClick = { () => setPageIndex(i => i - 1) }
9295
>
9396
{'<'}
9497
</button>{' '}
95-
<button disabled = { !canNextPage } onClick = { () => nextPage() }>
96-
{'>'}
97-
</button>{' '}
98-
<button
99-
disabled = { !canNextPage }
100-
onClick = { () => gotoPage(pageCount - 1) }
98+
<button
99+
disabled = { nextPagePossible() }
100+
onClick = { () => setPageIndex(i => i + 1) }
101101
>
102-
{'>>'}
102+
{'>'}
103103
</button>{' '}
104104
<span>
105105
Page{' '}
@@ -117,13 +117,7 @@ const PeopleTable = ({
117117
)
118118
}
119119

120-
const fetchPeople = async () => {
121-
let peopleList = await axios.get(`https://swapi.dev/api/people/?page=1`)
122-
return peopleList
123-
}
124-
125120
const ReactTable = () => {
126-
127121
let columns = useMemo(
128122
() => [
129123
{
@@ -156,13 +150,9 @@ const ReactTable = () => {
156150
},
157151
],
158152
[],
159-
)
160-
161-
return (
162-
<PeopleTable
163-
columns = { columns }
164-
/>
165153
)
154+
155+
return <PeopleTable columns = { columns } />
166156
}
167157

168158
export default ReactTable

0 commit comments

Comments
 (0)