[React 14] - Pagination / Lifting-State-Up

yiwoojungยท2022๋…„ 7์›” 16์ผ
0

{C} Codecamp FE 06

๋ชฉ๋ก ๋ณด๊ธฐ
14/21

๐Ÿš€ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ

  1. Pagination
  2. Lifting-State-Up

1. Pagination

ํŽ˜์ด์ง€๋„ค์ด์…˜

ํŽ˜์ด์ง€๋„ค์ด์…˜์ด๋ž€ ์œ„์ฒ˜๋Ÿผ ์ˆ˜๋งŽ์€ ๊ฒŒ์‹œ๊ธ€์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŽ˜์ด์ง€๋กœ ๋‚˜๋ˆ„์–ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ์กด ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ๊ฐ€์ง€๊ณ  ์™€์„œ ์•„๋ž˜ ์ˆซ์ž ๋ถ€๋ถ„๋งŒ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.

ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ๋ˆ„๋ฅผ๋•Œ๋งˆ๋‹ค ํ•ด๋‹นํ•˜๋Š” ๊ฐ๊ฐ์˜ ํŽ˜์ด์ง€๋ฅผ ๋ฆฌํŒจ์น˜ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์ „์— ์šฐ์„  API-DOCS๋ฅผ ๋ณด์ž.
์—ฌ๊ธฐ ์ด page ๊ฐ’์œผ๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ๋ฆฌํŒจ์น˜ ํ•ด์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•  ๋•Œ ์œ„์˜ page์— ๊ด€ํ•œ ๋ถ€๋ถ„์„ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.


๐ŸŒˆ ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ตฌํ˜„ํ•˜๊ธฐ

1. ๋ฐ์ดํ„ฐ๋ฅผ fetch ํ•  ๋•Œ refetch๋„ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ฐ™์ด ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

2. ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ค๋„๋ก ํŽ˜์ด์ง€๋ฅผ ํด๋ฆญํ•˜๋Š” ํ•จ์ˆ˜(onClickPage)์— ๋ฆฌํŒจ์น˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
๊ทธ๋Ÿผ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๋ฅผ ํด๋ฆญํ• ๋•Œ ๋งˆ๋‹ค data๊ฐ€ ๋‹ค์‹œ ๋ถˆ๋ ค์˜ค๊ฒŒ ๋˜๊ณ  ์ด ๋ฐ์ดํ„ฐ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์ค€๋‹ค.


์ด๋•Œ event.target.id ๋Š” string ํƒ€์ž…์ด๋ฏ€๋กœ Number๋กœ ๊ฐ์‹ธ์ค€๋‹ค.



๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ํŽ˜์ด์ง€ ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ์•„์ง„๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

3. ์œ„์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์ผ๋‹จ 10๊ฐœ์˜ ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


์ด์ œ ๋‹ค์ŒํŽ˜์ด์ง€์™€ ์ด์ „ํŽ˜์ด์ง€๋„ ๋งŒ๋“ค์–ด์ฃผ์ž.


4. ์šฐ์„  ๊ธฐ์ค€ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜ ์žก์•„์ค€๋‹ค.

๊ธฐ์ค€ํŽ˜์ด์ง€๋Š” ์‹œ์ž‘ํŽ˜์ด์ง€๋กœ ์žก์•˜๋‹ค.

const [startPage, setStartPage] = useState(1) 


5. ๋‹ค์ŒํŽ˜์ด์ง€์™€ ์ด์ „ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด ๋‘๊ฐœ์˜ ๋ฌธ์ œ์ ์ด ๋‚˜ํƒ€๋‚œ๋‹ค.

[Problem1.] 1ํŽ˜์ด์ง€์—์„œ ์ด์ „์„ ๋ˆ„๋ฅด๋ฉด ์Œ์ˆ˜ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.

[Problem2.] ํŽ˜์ด์ง€๊ฐ€ ์—†๋Š”๋ฐ ๋‹ค์ŒํŽ˜์ด์ง€๊ฐ€ ๊ณ„์† ์ƒ๊ธด๋‹ค.


๐Ÿ“Œ [Problem1.] ํ•ด๊ฒฐํ•˜๊ธฐ

1ํŽ˜์ด์ง€์—์„œ ์ด์ „์„ ๋ˆ„๋ฅด๋ฉด ์Œ์ˆ˜ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ์˜ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.



๐Ÿ“Œ [Problem2.] ํ•ด๊ฒฐํ•˜๊ธฐ

5-0 lastPage ๊ตฌํ•˜๊ธฐ

lastPage๋Š” ๊ธ€๊ฐฏ์ˆ˜ / 10 ํ•œ ๋’ค ์†Œ์ˆซ์  ๋’ท์ž๋ฆฌ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด ์˜ฌ๋ฆผํ•ด์ฃผ๋Š” ๋กœ์ง์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.


5-1 ์ด ๊ฒŒ์‹œ๋ฌผ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค์ค€๋‹ค.


5-2 ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์˜จ ๋’ค ๋ผ์ŠคํŠธํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

const {data:dataBoardsCount} = useQuery(FETCH_BOARDS_COUNT)
const lastPage = Math.ceil(dataBoarsCount?.fetchBoardsCount / 10)

5-3 ํ•ญ์ƒ ์‹œ์ž‘ํŽ˜์ด์ง€์—์„œ 10์„ ๋”ํ•œ ๊ฐ’์€ ๋ผ์ŠคํŠธํŽ˜์ด์ง€๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผํ•œ๋‹ค.

5-4 ์กฐ๊ฑด๋ถ€๋žœ๋”๋ง์„ ์‚ฌ์šฉํ•ด์„œ ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€ ์ดํ›„ ๊ฐ’์„ ๋ณด์ด์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด์ค€๋‹ค.

  • ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

5-5. ํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š” ๊ธ€์„ ๋ฆฌํŒจ์น˜ ํ•ด์ค€๋‹ค.



2. Lifting-State-Up

ํ˜•์ œ ์ปดํฌ๋„ŒํŠธ๋“ค ๋ผ๋ฆฌ๋Š” state๋ฅผ ์–ด๋–ป๊ฒŒ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์„๊นŒ

๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ๋‹จ๋ฐฉํ–ฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹์ด ์ž์‹์—๊ฒŒ ๋ณด๋‚ด์ฃผ๊ฑฐ๋‚˜ ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ ์ฃผ๋Š”๊ฒƒ๋„ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ถ€๋ชจ์—๊ฒŒ state๋ฅผ ์ฃผ๊ณ  ๊ทธ๊ฑธ ๋ฐ›์•„์˜ค๋ฉด ๋œ๋‹ค.

์ด๋•Œ ๋ถ€๋ชจ์˜ state ๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด
1) setstate ๋˜ํ•œ ๋‚ด๋ ค์ฃผ๊ฑฐ๋‚˜
2) ์ž์‹ ์ž์ฒด์—์„œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Example

1) ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋งŒ๋“  ์นด์šดํŠธ์—… ํ•จ์ˆ˜๋ฅผ ๋ฐ›์€ ์ž์‹(Child2)์˜ ๋ชจ์Šต์ด๋‹ค.

props๋กœ count ๊ฐ’๊ณผ onClickCountUpํ•จ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค.

2) ์ž์‹ ๋‚ด์—์„œ ์ž์ฒด์ ์œผ๋กœ ์นด์šดํŠธ์—… ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๊ณ  count๊ฐ’๋งŒ props๋กœ ๋ฐ›์•„์˜จ ๋ฐฉ์‹์ด๋‹ค.

์ด๋ ‡๊ฒŒ state๋ฅผ ์œ„๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ Lifting-state-up ์ด๋ผ๊ณ  ํ•œ๋‹ค.

profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€