ํจ์ํ ์ปดํฌ๋ํธ๋ ํจ์์ ๋๊ฐ์๋ฐ ์คํ๋ฐฉ๋ฒ์ ์์ ๊ฐ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ props
๋ ํจ์์ ๋ค์ด๊ฐ๋ ๋งค๊ฐ๋ณ์๋ผ๊ณ ํ ์ ์๋ค. ๊ทธ๋์ ์ด๋ฆ์ด ๊ผญ props์ผ ํ์๊ฐ ์๋ค.
๋ํ map์ด๋ filter ๋ฑ ๋ฉ์๋๋ฅผ ์คํํ ๋ ์์ฑํด์ฃผ๋ el
๊ณผ index
๋ ์ด๋ฆ์ด ๋ฌ๋ผ์ ธ๋ ๋๋ค.
prev
๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
$๊ฐ ๋ถ์ ์ ๋ค์ ๋ณ์์๊ธฐ ๋๋ฌธ์ ์ค์ ์์ฒญ์ ํ ๋ ํค๊ฐ๊ณผ ํต์ผ๋ง ๋๋ฉด ๋๋ค.
์ฌ๋ฌ ์์ฒญ์ ํ๋ฒ์ ๋ณด๋ผ ์ ์๋๋ฐ ์ด ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
Rest-API๋ ํ ํ์ด์ง์์ ํ์ํ API๋ฅผ ํ๊ฐ๋ง ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด๋ ๊ฒ ์ํ๋ ๊ฒ๋ณด๋ค ๋ ์ ๊ฒ ๊ฐ์ ธ์ฌ ์ ๋ฐ์ ์๋ค๋ ์ ์์ Rest-API๋ ์ธ๋ํจ์นญ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ ์ ์๋ค.
ํ์ง๋ง GraphQL์ ์ด๋ฌํ ์ธ๋ํจ์นญ์ ๋ฌธ์ ๋ฅผ ๊ทน๋ณตํด์ ํ๋ฒ์ ์์ฒญ์ผ๋ก ๋ชจ๋ ๋ฐ์์ฌ ์ ์๊ฒ ๋์๋ค.
Rest-API๋ ์ํ๋ ์์๋ณด๋ค ๋ ๋ง์ด ๊ฐ์ ธ์ค๋ ์ค๋ฒํจ์นญ ๋ฌธ์ ๋ ์๋ค. ๋ฐ๋ฉด์ GraphQL์ ์ํ๋ ์์๋ง ๋ฝ์์ ๊ฐ์ ธ์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฒํจ์นญ ๋ฌธ์ ๋ ํด๊ฒฐํ ์ ์๋ค.
\w
ํ๋์ ๋ฌธ์ ๋๋ ์ซ์^(์์)
$(๋)
+
๋ก ํ๊ธฐ?
*
๋ก ํ๊ธฐ.
์ ๋ชจ๋ ๊ฒ์ ์๋ฏธ\
๋ฅผ ์ฌ์ฉํด์ ์๋์ ์๋ฏธ๋ฅผ ํํผํด์ผ ํ๋ค. \d
digit, ์ซ์๋ฅผ ์๋ฏธ{3,4}
์๋ฆฟ์๋ฅผ ์๋ฏธ 3๊ฐ ๋๋ 4๊ฐ[a-zA-Z]
๋ฌธ์๋ฅผ ์๋ฏธ\s
์คํ์ด์ค๋ฐ, ๊ณต๋ฐฑ์ ์๋ฏธstate๊ฐ ์ฌ๋ฌ๊ณณ์์ ์ฌ์ฉ๋์ด์ผ ํ ๋ prop-drilling ์์ด redux๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ state๋ฅผ ์ ์ฅํด์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ง๋ง redux๋ ์ธํ
ํด์ผํ๋ ๋ถ๋ถ์ด ๋ง๊ธฐ ๋๋ฌธ์ mobX, swr ๋ฑ์ ๊ธ๋ก๋ฒ ์คํ
์ดํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๋์ค๊ฒ ๋์๋ค.
๋ ๋์๊ฐ ์ต๊ทผ์๋ createProduct๋ฑ api๋ฅผ ์ ์ฅํ๋ ์คํ
์ดํธ์ prop-drilling์ ์ ๊ฑฐํ๊ธฐ ์ํด์ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ global-state๋ฅผ ๋๋์ด์ ๊ด๋ฆฌํ๊ฒ ๋์๋ค.
api๋ฅผ ์ ์ฅํ๋ ์คํ
์ดํธ๋ฅผ Rest์ GraphQL์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ฌ์ฉ๋๋๋ฐ ๊ฐ ๊ฐ ๋ํ์ ์ผ๋ก React-query
์ Apollo-client
์ผ๋ก ๋๋๊ฒ ๋๋ค. ๋ ๊ฐ ๋ชจ๋ useMutation, useQuery๋ก ์ฌ์ฉํด์ ์ฌ์ฉ๋ฐฉ์์ ๊ฑฐ์ ๋น์ทํ๋ค๊ณ ํ ์ ์๋ค.
์ผ๋ฐ์ ์ธ global-state๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด์ ๋ฆฌ์กํธ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ context-api๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ํ๊ณ createContext, useContext๋ก ์ฌ์ฉํ๋ฉด๋๊ณ ๊ธฐ์กด์ useState์ ์ฌ์ฉ๋ฒ์ด ๋น์ทํ๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ ๋ฌธ์ ์ ์ด ์์ด์ ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด์ Recoil
์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ง๋ค์ด์ก๋ค. Recoil๋ context-api๋ก ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋ฒ์ด ๋น์ทํ๋ค.
(Recoil์ด Redux์ ๋ชจ๋ ๊ฒ์ ๋์ฒดํ ์ ์๋ ๊ฒ์ ์๋๋ค. Redux๋ React-query์ Apollo-client๋ก ๋์ฒด๋์๊ณ ๋ถ์กฑํ ๋ถ๋ถ์ Recoil๋ก ์ฑ์ฐ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.)
์ด๋ ๊ฒ api์ api๊ฐ ์๋ ์ผ๋ฐ ๊ธ๋ก๋ฒ-์คํ ์ดํธ๋ก ๋๋๊ฒ ๋ ์ด์ ๋ fetchPolicy ๋๋ฌธ์ด๋ค. fetchPolicy๋ ํจ์น ์ ์ฑ ์ธ๋ฐ ๋ ์์ธํ ์์๋ณด์.
const {data} = useQuery()
๋ค์์ฒ๋ผ apollo-client์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๋ ์บ์-์คํ
์ดํธ(๊ธ๋ก๋ฒ-์คํ
์ดํธ)์ ์ ์ฅ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ฒ ๋๋ฉด undefined๊ฐ ๋์ค๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์์ data
๋ ๊ธ๋ก๋ฒ ์คํ
์ดํธ์์ ๊ฐ์ ธ์จ state
์ด๊ธฐ ๋๋ฌธ์ state๊ฐ ๋ฐ๋๊ฒ ๋์ด ์ด๋ก ์ธํด์ ๋ฐ๋ state
๋ก ํ์ด์ง๊ฐ ๋ฆฌ๋๋๋ง ๋๋ ๊ฒ์ด๋ค.
์ด ๋ ๋ง์ฝ ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๋์ผํ ํจ์น๋ฅผ ํ๋ค๋ฉด ์ด data
๊ฐ ์ด๋ฏธ ์บ์-์คํ
์ดํธ(๊ธ๋ก๋ฒ-์คํ
์ดํธ)์ ์ ์ฅ๋์ด ์์ด์ ๋ ์๋กญ๊ฒ ๋ฐฑ์๋์ ์์ฒญํ ํ์๊ฐ ์๋ค. ์ด๋ฌํ ํน์ง์ fetchPolicy์ cache-first ๋ผ๊ณ ํ๋ค. ์ด ์ต์
์ด default ๊ฐ์ด๋ค. (์ด ์ต์
์ ์ฌ๋ฌ๊ฐ์ง ์๋๋ฐ network-only๋ก ์ค์ ์ ํ๋ค๋ฉด ์บ์์ ์๊ฐ๊ณ ๋ฌด์กฐ๊ฑด ๋ฐฑ์๋๋ก ์์ฒญํ ์ ์๋ค. ๋งค๋ฒ ์ค์๊ฐ์ผ๋ก ๋ณด์ฌ์ค์ผ ํ๋ค๋ฉด network-only๋ก ์ค์ ํด์ผ ํ๋ค. )
์ด๋ฐ ๊ฒ๋ค์ด ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ ธ ์๋ค ๋ณด๋ ํจ์ฌ ํจ์จ์ ์ผ๋ก state๋ฅผ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ค. ๊ทธ๋์ ์ด ๋๊ฐ๋ฅผ ๋๋ ํ์๊ฐ ์๊ฒจ api์ ์ผ๋ฐ ๊ธ๋ก๋ฒ-์คํ
์ดํธ๋ฅผ ๋๋๊ฒ ๋์๋ค.
fetchPolicy๋ ์ด๋ ๊ฒ ์ค์ ํ ์ ์๋ค.
Apollo Client Devtools๋ฅผ ์ฌ์ฉํ๋ฉด apolli-client์ ์ ์ฅ๋์ด ์๋ state๋ฅผ chrome์์ ํ์ธํ ์ ์๋ค.
React Developer Tools๋ฅผ ์ฌ์ฉํ๋ฉด ํฌ๋กฌ์์ React State๋ ํ์ธํ ์ ์๋ค.