โœ๐Ÿป [Code Camp_TIL] 22์ผ์ฐจ: ์ปดํฌ๋„ŒํŠธ์™€ props, el, prev, graphql์˜ ์‹ค์ฒด

code_Jยท2023๋…„ 4์›” 22์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
27/41
post-thumbnail

์˜ค๋Š˜์€ ๋ฌด์ž‘์ • ์•”๊ธฐํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ props, el, prev์˜ ๊ฐœ๋…์„ ์ข€ ๋” ์ •ํ™•ํ•˜๊ฒŒ ์žก์•˜๋‹ค.

props์˜ ์‹ค์ฒด


ํ•จ์ˆ˜์˜ ์„ ์–ธ๊ณผ ํ•จ์ˆ˜์˜ ์‹คํ–‰

์ธ์ž๊ฐ€ ํ•จ์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ  ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ธ์ž๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜(parameter)์˜ ์ด๋ฆ„์€ ๋งˆ์Œ๋Œ€๋กœ ์ง€์–ด๋„ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ํ˜‘์—…์„ ํ•  ๋•Œ์—๋Š” ๊ด€๋ก€๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ๋„ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ผญ props๊ฐ€ ์•„๋‹ˆ์—ฌ๋„ ๋œ๋‹ค.


๋˜ํ•œ, ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

import Presenter from "";

export default function Container() {
  return (
    <>
      <Presenter count={123} />
    </>
  );
}

ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— presenter ๋ถ€๋ถ„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ”์ค„ ์ˆ˜ ์žˆ๋‹ค.

import Presenter from "";

export default function Container() {
  return (
    <>
    {Presenter({count: 123})}
    </>
  );
}

el์˜ ์‹ค์ฒด


["์ฒ ์ˆ˜","์˜ํฌ","ํ›ˆ์ด"].map((el,index)=>(console.log(`${el}๋Š” ${index}๋ฒˆ์งธ ์ž…๋‹ˆ๋‹ค.`)))

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, ์œ„์˜ map์„ ("์ฒ ์ˆ˜",0)("์˜ํฌ",1)("ํ›ˆ์ด",2) ์™€ ๊ฐ™์ด ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์ž๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋„˜๊ฒจ์ฃผ๋Š”๋ฐ, ์ธ์ž์˜ ์ˆœ์„œ๋Š” ๋ฐฐ์—ด์˜ value ๊ฐ’ -> ํ•ด๋‹น value์˜ index ๊ฐ’ ์ˆœ์„œ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด, ์•„๋ž˜์—์„œ index๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ• ๊นŒ?

["์ฒ ์ˆ˜", "์˜ํฌ", "ํ›ˆ์ด"].map((index) => (
  console.log(`${index}๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?`)
))

์ด๋ฆ„์€ index์ง€๋งŒ, ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์ธ "์ฒ ์ˆ˜", "์˜ํฌ", "ํ›ˆ์ด"๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰ map๋„ ํ•จ์ˆ˜์ด๊ณ , el๊ณผ index๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜(ํŒŒ๋ผ๋ฏธํ„ฐ)์ด๋‹ค!


prev์˜ ์‹ค์ฒด


state์˜ prev ๋˜ํ•œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋‹ค.


setCount(prev => prev + 1)

์ง€๊ธˆ๊นŒ์ง€๋Š” ์œ„์˜์ฝ”๋“œ์ฒ˜๋Ÿผ ์จ์™”์ง€๋งŒ, ์•„๋ž˜์ฒ˜๋Ÿผ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค!


setCount((prev) => {return prev + 1})

setCount ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๊ฐ€ ๋“ค์–ด๊ฐ€๊ณ , ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์•ˆ์˜ prev๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋œ๋‹ค.


graphql์˜ ์‹ค์ฒด

props, el, prev์— ์ด์–ด์„œ graphql์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์•˜๋‹ค.


graphql-variables

์œ„ ๊ทธ๋ฆผ์—์„œ $๊ฐ€ ๋ถ™์€ ๊ฒƒ๋“ค์€ ๋ณ€์ˆ˜๋‹ค. ๋”ฐ๋ผ์„œ $writer๋Š” $aaa ์—ฌ๋„ ์ƒ๊ด€์—†๋‹ค.


๋˜ํ•œ, query๋ฅผ ๋ณด๋‚ผ ๋•Œ createBoard๋ฅผ ๋‘ ๋ฒˆ ์ ๋Š” ์ด์œ ๋Š”, gql์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ api๋ฅผ ๋ฌถ์–ด์„œ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

const REQUEST = gql`
mutation ํ•œ๋ฒˆ์—์š”์ฒญํ• ๊ทธ๋ฃน์ด๋ฆ„ ($๋ณ€์ˆ˜ : ๋ณ€์ˆ˜ํƒ€์ž…){
	์›ํ•˜๋Š”API1(๋ฐฑ์—”๋“œ์ง€์ •:$๋ณ€์ˆ˜){
		//๋ฐ›์•„์˜ฌ ๊ฒƒ
	}

	์›ํ•˜๋Š”API2(๋ฐฑ์—”๋“œ์ง€์ •:$๋ณ€์ˆ˜){
		//๋ฐ›์•„์˜ฌ ๊ฒƒ
	}
}
`

graphql๊ณผ rest-api์˜ ๊ด€๊ณ„

graphql๋„ ์‚ฌ์‹ค rest api์˜€๋‹ค. rest api์˜ ์–ธ๋”ํŽ˜์นญ, ์˜ค๋ฒ„ํŽ˜์นญ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , *์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ฉ(์—”๋“œํฌ์ธํŠธ 1๊ฐœ์ธ post ๋ฐฉ์‹)ํ•ด์„œ graphql-api๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

*endpoint๋ž€? api๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” URL

์–ธ๋”ํŽ˜์นญ

๊ธฐ์กด์˜ rest api์—์„œ๋Š” ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์—์„œ ์—ฌ๋Ÿฌ api๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•  ๋•Œ, ๋ฐฑ์—”๋“œ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ api ์š”์ฒญ์„ ๋ณด๋ƒˆ์–ด์•ผ ํ–ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ rest api์˜ ์–ธ๋”ํŽ˜์นญ ๋ฌธ์ œ์ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ทœ๋ชจ๊ฐ€ ํฐ ์„œ๋น„์Šค์—์„œ๋Š” ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ api ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•œ graphql์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋‹ค.


์˜ค๋ฒ„ํŽ˜์นญ

๋˜ํ•œ rest api๋Š” ํ•„์š” ์—†๋Š” ๊ฒฐ๊ณผ๊ฐ’๊นŒ์ง€ ๋ฐฑ์—”๋“œ์—์„œ ๋ฐ›์•„์˜ค๋Š” ์˜ค๋ฒ„ํŽ˜์นญ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

gql์€ ๋ฐ˜๋ฉด ์›ํ•˜๋Š” ๊ฒƒ๋งŒ ๊ณจ๋ผ์„œ api ์š”์ฒญ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค!


endpoint

rest-api์˜ ๋˜ ํ•˜๋‚˜์˜ ๋ฌธ์ œ์ ์€ ๋„ˆ๋ฌด ๋งŽ์€ endpoint๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค๋Š” ์ ์ด๋‹ค.

rest api์˜ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ: axios.get(API ์ฃผ์†Œ)
๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก: axios.post(API ์ฃผ์†Œ, {๋ฐ์ดํ„ฐ})

rest-api์—์„œ๋Š” post, get, put, delete, update ๋ฐฉ์‹๋งŒ ํ•ด๋„ ๋ฒŒ์จ endpoint๊ฐ€ 5๊ฐœ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์ด์™ธ์˜ endpoint๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋งŽ์€ ์–‘์˜ endpoint๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.


๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ์ ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๊ฒƒ์ด graphql์ด๋‹ค. graphql์€ rest-api์˜ post ๋ฐฉ์‹์—์„œ data๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ์„ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด๋‚ธ ๋ฐฉ์‹์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ rest-api์˜ ์‘์šฉ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

graphql์€ post ๋ฐฉ์‹์˜ body์— ๋‚ด๊ฐ€ ์‹คํ–‰์‹œํ‚ฌ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ ์–ด์„œ endpoint๋ฅผ ์š”์ฒญํ•œ๋‹ค.


graph ql์ด ๋ฌด์กฐ๊ฑด ์žฅ์ ๋งŒ ์žˆ์„๊นŒ?

graphql์ด ๋ฌด์กฐ๊ฑด ์ข‹์€ ์ ๋งŒ ์žˆ๋Š”๊ฑธ๊นŒ? ๊ทธ๋ ‡์ง€๋Š” ์•Š๋‹ค. graphql์„ ์จ์„œ ๋น„์šฉ์ด ํšจ์œจ์ ์œผ๋กœ ๊ฐ์†Œํ•˜๋Š” ํฐ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค์—์„œ๋Š” ์ฃผ๋กœ graphql์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์•„์ง๊นŒ์ง„ rest api๋ฅผ ์“ฐ๋Š” ํšŒ์‚ฌ๊ฐ€ ๋” ๋งŽ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜คํ”ˆ api๋Š” ๋Œ€๋ถ€๋ถ„ rest-api์ด๋‹ค.

๋˜ํ•œ graphql์€ ์บ์‹œ(์ž„์‹œ์ €์žฅ)์ด ์–ด๋ ต๋‹ค.

์บ์‹œ(์ž„์‹œ์ €์žฅ)

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ผํ•œ api๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ, ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์š”์ฒญํ•˜๊ณ  ๋ฐ›์•„์˜ค์ง€ ์•Š๊ณ  ๋ฐฑ์—”๋“œ์— ์ „์—ญ๊ฐ์ฒด๋กœ ์ €์žฅํ•ด๋†“๊ณ  ๋ณด๋‚ด์ค€๋‹ค. graphql์€ ์–ด๋–ค api๋ฅผ ์š”์ฒญํ•ด๋„ ์ฃผ์†Œ๊ฐ€ "/graphql" ํ•œ ๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฑ์—”๋“œ์— ์ž„์‹œ์ €์žฅํ•ด๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ณด๋‚ด์ฃผ๊ธฐ ์‰ฝ์ง€ ์•Š๋‹ค. ์บ์‹œ๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ณต์žกํ•ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค!




profile
Web FE ๊ฐœ๋ฐœ์ž ์ทจ์ค€์ƒ

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