์ค๋์ ๋ฌด์์ ์๊ธฐํด์ ์ฌ์ฉํ๋ props
, el
, prev
์ ๊ฐ๋
์ ์ข ๋ ์ ํํ๊ฒ ์ก์๋ค.
์ธ์
๊ฐ ํจ์๋ก ๋ค์ด๊ฐ๊ฒ ๋๊ณ ํจ์์ ๋งค๊ฐ๋ณ์
๋ ์ธ์๋ฅผ ๋ฐ์์จ๋ค.
ํจ์์ ๋งค๊ฐ๋ณ์(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})}
</>
);
}
["์ฒ ์","์ํฌ","ํ์ด"].map((el,index)=>(console.log(`${el}๋ ${index}๋ฒ์งธ ์
๋๋ค.`)))
์์ ์ฝ๋๋ฅผ ๋ณด๋ฉด, ์์ map์ ("์ฒ ์",0)("์ํฌ",1)("ํ์ด",2) ์ ๊ฐ์ด ์คํ์์ผ์ค๋ค. ์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ์์๋๋ก ๋๊ฒจ์ฃผ๋๋ฐ, ์ธ์์ ์์๋ ๋ฐฐ์ด์ value ๊ฐ -> ํด๋น value์ index ๊ฐ ์์๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์๋์์ index๋ ๋ฌด์์ ์๋ฏธํ ๊น?
["์ฒ ์", "์ํฌ", "ํ์ด"].map((index) => (
console.log(`${index}๋ ๋ฌด์์ผ๊น์?`)
))
์ด๋ฆ์ index์ง๋ง, ๋ฐฐ์ด์ ๊ฐ ์์์ธ "์ฒ ์", "์ํฌ", "ํ์ด"๋ฅผ ์๋ฏธํ๋ค. ์ฆ map๋ ํจ์์ด๊ณ , el๊ณผ index๋ ํจ์์ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ)์ด๋ค!
state์ prev
๋ํ ํจ์์ ๋งค๊ฐ๋ณ์์ด๋ค.
setCount(prev => prev + 1)
์ง๊ธ๊น์ง๋ ์์์ฝ๋์ฒ๋ผ ์จ์์ง๋ง, ์๋์ฒ๋ผ ์ธ ์๋ ์๋ค!
setCount((prev) => {return prev + 1})
setCount ํจ์์ ์ธ์๋ก ํ์ดํ ํจ์๊ฐ ๋ค์ด๊ฐ๊ณ , ํ์ดํ ํจ์ ์์ prev๋ ํจ์์ ๋งค๊ฐ๋ณ์๊ฐ ๋๋ค.
props, el, prev์ ์ด์ด์ graphql
์ ๋ํด ์ข ๋ ์์ธํ ์์๋ณด์๋ค.
์ ๊ทธ๋ฆผ์์ $
๊ฐ ๋ถ์ ๊ฒ๋ค์ ๋ณ์๋ค. ๋ฐ๋ผ์ $writer๋ $aaa ์ฌ๋ ์๊ด์๋ค.
๋ํ, query๋ฅผ ๋ณด๋ผ ๋ createBoard๋ฅผ ๋ ๋ฒ ์ ๋ ์ด์ ๋, gql์ด ์ฌ๋ฌ ๊ฐ์ api๋ฅผ ๋ฌถ์ด์ ์์ฒญํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์์ ๋ค์๊ณผ ๊ฐ๋ค.
const REQUEST = gql`
mutation ํ๋ฒ์์์ฒญํ ๊ทธ๋ฃน์ด๋ฆ ($๋ณ์ : ๋ณ์ํ์
){
์ํ๋API1(๋ฐฑ์๋์ง์ :$๋ณ์){
//๋ฐ์์ฌ ๊ฒ
}
์ํ๋API2(๋ฐฑ์๋์ง์ :$๋ณ์){
//๋ฐ์์ฌ ๊ฒ
}
}
`
graphql
๋ ์ฌ์ค rest api์๋ค. rest api์ ์ธ๋ํ์นญ, ์ค๋ฒํ์นญ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , *์๋ํฌ์ธํธ๋ฅผ ํตํฉ(์๋ํฌ์ธํธ 1๊ฐ์ธ post ๋ฐฉ์)ํด์ graphql-api๊ฐ ๋ฑ์ฅํ๊ฒ ๋์๋ค.
๊ธฐ์กด์ rest api์์๋ ํ๋์ ํ์ด์ง์์ ์ฌ๋ฌ api๋ฅผ ์์ฒญํด์ผ ํ ๋, ๋ฐฑ์๋๋ก ์ฌ๋ฌ ๋ฒ api ์์ฒญ์ ๋ณด๋์ด์ผ ํ๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ rest api์ ์ธ๋ํ์นญ
๋ฌธ์ ์ ์ด๋ผ๊ณ ํ๋ค.
๋ฐ๋ผ์ ๊ท๋ชจ๊ฐ ํฐ ์๋น์ค์์๋ ํ ๋ฒ์ ์ฌ๋ฌ api ์์ฒญ์ด ๊ฐ๋ฅํ graphql์ ์ฌ์ฉํ๋ ํธ์ด๋ค.
๋ํ rest api๋ ํ์ ์๋ ๊ฒฐ๊ณผ๊ฐ๊น์ง ๋ฐฑ์๋์์ ๋ฐ์์ค๋ ์ค๋ฒํ์นญ
๋ฌธ์ ์ ์ด ์๋ค.
gql์ ๋ฐ๋ฉด ์ํ๋ ๊ฒ๋ง ๊ณจ๋ผ์ api ์์ฒญ์ ํ ์ ์๋ค!
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๋ฅผ ์์ฒญํ๋ค.
graphql์ด ๋ฌด์กฐ๊ฑด ์ข์ ์ ๋ง ์๋๊ฑธ๊น? ๊ทธ๋ ์ง๋ ์๋ค. graphql์ ์จ์ ๋น์ฉ์ด ํจ์จ์ ์ผ๋ก ๊ฐ์ํ๋ ํฐ ๊ท๋ชจ์ ์๋น์ค์์๋ ์ฃผ๋ก graphql์ ์ฌ์ฉํ์ง๋ง, ์์ง๊น์ง rest api๋ฅผ ์ฐ๋ ํ์ฌ๊ฐ ๋ ๋ง๋ค. ๊ทธ๋ฆฌ๊ณ ์คํ api๋ ๋๋ถ๋ถ rest-api์ด๋ค.
๋ํ graphql์ ์บ์(์์์ ์ฅ)์ด ์ด๋ ต๋ค.
๋ธ๋ผ์ฐ์ ์์ ๋์ผํ api๋ฅผ ์์ฒญํ์ ๋, ๋งค๋ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฒญํ๊ณ ๋ฐ์์ค์ง ์๊ณ ๋ฐฑ์๋์ ์ ์ญ๊ฐ์ฒด๋ก ์ ์ฅํด๋๊ณ ๋ณด๋ด์ค๋ค. graphql์ ์ด๋ค api๋ฅผ ์์ฒญํด๋ ์ฃผ์๊ฐ "/graphql" ํ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฑ์๋์ ์์์ ์ฅํด๋๊ณ ํ์ํ ๋๋ง๋ค ๋ณด๋ด์ฃผ๊ธฐ ์ฝ์ง ์๋ค. ์บ์๊ฐ ์๋๋ ๊ฒ์ ์๋์ง๋ง, ๋ณต์กํด์ง๋ค๋ ๋จ์ ์ด ์๋ค!