[React 07] - map, filter, refetch, key / index

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

{C} Codecamp FE 06

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

๐Ÿ—ฟ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ

  1. map / filter
  2. key / index
  3. refetch ์‚ฌ์šฉํ•˜๊ธฐ
  4. map ์—์„œ key๋ฅผ index๋กœ ์ฃผ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 

1. map / filter

map

๋ฐ˜๋ณต๋ฌธ์„ ์จ์•ผํ•  ๋•Œ ์‹ค๋ฌด์—์„œ๋Š” for๋ฌธ ๋Œ€์‹  map์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

map ์‚ฌ์šฉ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž.

๋ฐฐ์—ด์„ map ๋Œ๋ ค๋ณด์ž.

๊ฐ์ฒด๋ฅผ map ๋Œ๋ ค๋ณด์ž.


๋‹ค์Œ ํ€ด์ฆˆ๋ฅผ ํ’€์–ด๋ณด์ž.




์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

classmates.map((el)=>({name:el.name, age:el.age, school:"ํ† ๋ผ์ดˆ๋“ฑํ•™๊ต"}))

์—ฌ๊ธฐ์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋” ์•Œ์•„๋ณด์ž.




ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€ return

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ๋” ์•Œ์•„๋ณด๊ธฐ ์ „์— return์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.


return

๋‘๊ฐœ์˜ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋Š” add ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž. (๋ณดํ†ต ํ•จ์ˆ˜์˜ ์ด๋ฆ„์€ ๋™์‚ฌ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๋ณ€์ˆ˜๋ช…์€ ๋ช…์‚ฌ๋กœ ์‹œ์ž‘ํ•œ๋‹ค.)
์ด๋ ‡๊ฒŒ ์ƒ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์„œ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ๋ฒ• ๋ง๊ณ  ๊ทธ๋•Œ ๊ทธ๋•Œ ์›ํ•˜๋Š” ๊ฐ’์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ด ๋•Œ ํ•จ์ˆ˜( add2 )๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ฐ’์„ ์ธ์ž arguments ๋ผ๊ณ  ํ•˜๊ณ  args๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ธ์ž๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” aaa, bbb๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ parameter ๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ณดํ†ต ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ์„ ํ•˜๊ฒŒ ํ•œ๋‹ค.

๋งŒ์•ฝ์— add์™€ multi ๋ผ๋Š” ๋”ํ•˜๊ธฐ์™€ ๊ณฑํ•˜๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋‘ ๊ฐœ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ์ด ๋•Œ ๋”ํ•˜๊ธฐ์˜ ๊ฐ’๊ณผ ๊ณฑํ•˜๊ธฐ์˜ ๊ฐ’์„ ํ•ฉ์น˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๋”ํ•˜๊ธฐ์˜ ๊ฒฐ๊ณผ๊ฐ’๊ณผ ๊ณฑํ•˜๊ธฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ์–ด์•ผ ๋  ๊ฒƒ์ด๋‹ค.
์ด ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ return ์ด๋‹ค.
return์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
์ด์ œ return์„ ๋„ฃ์–ด ์ฝ”๋“œ๋ฅผ ๊ณ ์ณ๋ณด์ž.

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ  result ๋ผ๋Š” ์ƒ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ €์žฅํ•˜๋ฉด ๋œ๋‹ค.


์ด ์ฝ”๋“œ๋ฅผ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๊ณ ์ณ๋ณด์ž.



ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

์ด ๋•Œ ํ™”์‚ดํ‘œํ•จ์ˆ˜๋Š” ์ค‘๊ด„ํ˜ธ์™€ return ์‚ฌ์ด์— ์–ด๋– ํ•œ ๋กœ์ง์ด ์—†๋‹ค๋ฉด ์ค‘๊ด„ํ˜ธ์™€ return์„ ์†Œ๊ด„ํ˜ธ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์‹ฌ์ง€์–ด ์†Œ๊ด„ํ˜ธ๋„ ๋นผ๋„ ๊ดœ์ฐฎ๋‹ค๋ฉด ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค์Œ์˜ ์†Œ๊ด„ํ˜ธ๋Š” ์ƒ๋žต์ด ๊ฐ€๋Šฅํ• ๊นŒ?

์ด๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
์—ฌ๊ธฐ์„œ ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•ด๋ฒ„๋ฆฌ๋ฉด ๊ฐ์ฒด์˜ ์ค‘๊ด„ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜์˜ ์ค‘๊ด„ํ˜ธ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ’์€ undefined๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ ์†Œ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์ž˜ ์•Œ์•„๋ณด๊ณ  ์ƒ๋žตํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ์˜ํ•˜์ž!



์ด FRUITS ๋ผ๋Š” ๋ฐฐ์—ด์„ ์ด๋ ‡๊ฒŒ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ?

์•„๋ž˜์ฒ˜๋Ÿผ JSX ๋ถ€๋ถ„์— ์ง์ ‘ map ๋Œ๋ ค์„œ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

์ด ๋•Œ ์œ„์™€ ๊ฐ™์ด ํ•˜๋“œ์ฝ”๋”ฉ ๋˜๊ฑฐ๋‚˜ ๋ฐฑ์—”๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„์€ ์ฃผ๋กœ ๋Œ€๋ฌธ์ž๋กœ ์ž‘์„ฑํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ–์œผ๋กœ ๋นผ๋‘๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๋นผ๋‘”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฆฌ๋ Œ๋”๋ง ๋ผ๋„ ์ƒˆ๋กœ ๊ทธ๋ ค์ง€์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

state๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํŽ˜์ด์ง€๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง์ด ๋˜๋Š”๋ฐ ์ด ๋•Œ use๋กœ ์‹œ์ž‘ํ•˜๋Š” hooks๋“ค์€ ๋ฆฌ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฐ hooks๋“ค ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. ( memoiazation์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜๋จธ์ง€ ์• ๋“ค๋„ ํŽ˜์ด์ง€๊ฐ€ ๋ฆฌ๋ Œ๋”๋ง ๋˜์–ด๋„ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. )


filter

filter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์›ํ•˜๋Š” ์• ๋“ค๋งŒ ํ•„ํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹ค์Œ์ฒ˜๋Ÿผ ๋’ท๋ถ€๋ถ„์— ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ์กฐ๊ฑด์— ๋งž์œผ๋ฉด ์‚ด๋ ค์ฃผ๊ณ  ๋งž์ง€ ์•Š์œผ๋ฉด ์‚ญ์ œ๋œ๋‹ค.

์ด๋Ÿฐ ๋ชฉ๋ก์—์„œ 3์œ„๊นŒ์ง€๋งŒ ๋ณด์—ฌ์ค€๋‹ค๋˜์ง€ ์›ํ•˜๋Š” ๊ฐ’๋งŒ ๋ณด์—ฌ์ฃผ๊ณ ์ž ํ•œ๋‹ค๋ฉด filter๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

filter & map

filter์™€ map์„ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
์ด๋Ÿฐ์‹์œผ๋กœ filter๋ฅผ ๋จผ์ € ์‚ฌ์šฉํ• ์ˆ˜๋„ ์žˆ๋‹ค.

map์„ ์‚ฌ์šฉํ•˜๋ฉด ์›๋ณธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ™์ง€๋งŒ filter๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด ๊ฒฐ๊ณผ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์›๋ณธ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ ๊ฑฐ๋‚˜ ๊ฐ™์„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.



์‹ค๋ฌด์—์„œ๋Š” ๋ณดํ†ต map์„ ๋‹ค์Œ์ฒ˜๋Ÿผ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์„ ๋ฟŒ๋ฆด ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ธ๋‹ค.



2. key / index

ํ•œ๋ฒˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ filter์™€ map์„ ๊ฐ™์ด ์‚ฌ์šฉํ•ด๋ณด์ž.

ํ•œ์ค„๋กœ ๋ณด์—ฌ์•ผ ํ•˜๋‹ˆ๊นŒ ์Šคํƒ€์ผ๋„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

์ด ๋•Œ ์ฝ˜์†”์ฐฝ์— ์—๋Ÿฌ๊ฐ€ ๋œฐ ๊ฒƒ์ด๋‹ค.

ํ‚ค๊ฐ€ ์—†๋‹ค๋Š” ์—๋Ÿฌ๋‹ค. ๊ฐ™์€ ์• ๋“ค์ด ๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š”๋ฐ ๋ˆ„๊ฐ€ ๋ˆ„๊ตฐ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๊ณ  ํ•˜๋Š”๊ฑฐ๋‹ค.
ํ‚ค๊ฐ’์€ ์ค‘๋ณต๋˜๋ฉด ์•ˆ๋˜๊ณ  ๊ณ ์œ ํ•œ ๋ฒˆํ˜ธ์—ฌ์•ผ ํ•œ๋‹ค.
์ž‘์„ฑ์ž๋‚˜ ์ œ๋ชฉ์ด ๋™์ผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค๊ฐ’์„ ์ค˜์•ผํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด map์€ el ๋’ค์— index ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ธ๋ฑ์Šค๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ค˜๋„ ๋ ๊นŒ?

key={index}

map์—์„œ key๋กœ index๋ฅผ ์ฃผ๋ฉด ์•ˆ๋œ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์‚ญ์ œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚˜์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.





3. refetch ์‚ฌ์šฉํ•˜๊ธฐ

์‚ญ์ œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๋‚˜์„œ ๋ชฉ๋ก์„ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ ๋•Œ refetch๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

deleteBoard({
	variables:{number: Number(event.target.id)},
    refetchQueries: [{query: FETCH_BOARDS}]
})




4. map ์—์„œ key๋ฅผ index๋กœ ์ฃผ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 

์ด์ œ map์—์„œ key๋กœ index๋ฅผ ์ฃผ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž.

๋งŒ์•ฝ ์„ ํƒํ•œ ๊ฒŒ์‹œ๊ธ€์„ ํ•˜๋‚˜ ์‚ญ์ œํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ํ‚ค๋ฅผ ์ธ๋ฑ์Šค๋กœ ์ฃผ์—ˆ๋‹ค๋ฉด ์‚ญ์ œ ํ›„ ๊ฒŒ์‹œ๊ธ€์ด ๋ฆฌํŒจ์น˜๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฒŒ์‹œ๊ธ€์ด ์ง€์šฐ๋”๋ผ๋„ ์•„๋ž˜์˜ ๊ฒŒ์‹œ๊ธ€์ด ๋‹ค์‹œ ์˜ฌ๋ผ์˜ค๋ฉด์„œ ์‚ญ์ œํ•˜๋ ค๊ณ  ์„ ํƒํ•œ ์ธ๋ฑ์Šค๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ map์„ ๋Œ๋ฆด ๋•Œ๋Š” key๋ฅผ index๋กœ ์ฃผ๋ฉด ์•ˆ๋œ๋‹ค!!!

(+) Fragment ์‚ฌ์šฉํ•˜๊ธฐ

๋˜ํ•œ map์•ˆ์— JSX๋ฅผ ๊ฐ์‹ธ๊ธฐ ์œ„ํ•ด์„œ ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ๋นˆ ํƒœ๊ทธ์ธ Fragment๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ key๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ƒฅ <></> ๋นˆํƒœ๊ทธ ์ž‘์„ฑ์€ key๋ฅผ ์ค„ ์ˆ˜ ์—†๋‹ค.

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

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