Client Ajax
1. React ๋ฐ์ดํฐ ํ๋ฆ
React์ ๊ฐ์ฅ ํฐ ํน์ง์ ํ์ด์ง๊ฐ ์๋, ์ปดํฌ๋ํธ ๋จ์๋ก ์์ํ๋ค๋ ์
๋ฐ์ดํฐ๋ ์์์ ์๋๋ก ํ๋ฅธ๋ค : ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ (one-way data flow)
state ๋์ด ์ฌ๋ฆฌ๊ธฐ๋ก ์ญ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ์ถ๊ฐ โ ์์ ์ปดํฌ๋ํธ์ "์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์" ๊ทธ ์์ฒด๋ฅผ ํ์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ณ , ์ด ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ๊ฐ ์คํํจ
(1) Side Effect (๋ถ์ ํจ๊ณผ)
ํจ์ ๋ด์์ ์ด๋ค ๊ตฌํ์ด ํจ์ ์ธ๋ถ์ ์ํฅ์ ๋ผ์น๋ ๊ฒฝ์ฐ
React์์๋ ์ปดํฌ๋ํธ ๋ด์์ fetch๋ฅผ ์ฌ์ฉํด API ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ด๋ฒคํธ๋ฅผ ํ์ฉํด DOM์ ์ง์ ์กฐ์ํ ๋ Side Effect๊ฐ ๋ฐ์ํ๋ค๊ณ ํจ
(2) Pure Function (์์ ํจ์)
์ค์ง ํจ์์ ์ ๋ ฅ๋ง์ด ํจ์์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋ ํจ์๋ฅผ ์๋ฏธ
์์ํจ์๋ ์ ๋ ฅ์ผ๋ก ์ ๋ฌ๋ ๊ฐ์ ์์ ํ์ง ์์
์์ํจ์์๋ ๋คํธ์ํฌ ์์ฒญ๊ณผ ๊ฐ์ Side Effect์ด ์์
์ด๋ ํ ์ ๋ฌ์ธ์๊ฐ ์ฃผ์ด์ง ๊ฒฝ์ฐ, ํญ์ ๋๊ฐ์ ๊ฐ์ด ๋ฆฌํด๋จ์ ๋ณด์ฅํ์ฌ ์์ธก ๊ฐ๋ฅํ ํจ์์
(3) React์ ํจ์ ์ปดํฌ๋ํธ
React์ ํจ์ ์ปดํฌ๋ํธ๋ props๊ฐ ์ ๋ ฅ์ผ๋ก, javascript Element๊ฐ ์ถ๋ ฅ์ผ๋ก ๋๊ฐ๋ฉฐ, ์ฌ๊ธฐ์ ๊ทธ ์ด๋ ํ Side Effect๋ ์์ผ๋ฉฐ ์์ ํจ์๋ก ์๋
๋ค๋ง, ๋ณดํต React ์ ํ๋ฆฌ์ผ์ด์ ์์ฑ ์, AJAX ์์ฒญ์ด ํ์ํ๊ฑฐ๋ fetch API, LocalStorage ๋๋ ํ์ด๋จธ์ ๊ฐ์ React์ ์๊ด์๋ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฐ์ ๊ฐ๋ฅํ๊ณ , ์ด๋ React ์ ์ฅ์์๋ ๋ชจ๋ Side Effect์
2. Effect Hook
(1) Effect Hook
useEffect
๋ ์ปดํฌ๋ํธ ๋ด์์ Side Effect๋ฅผ ์คํํ ์ ์๊ฒ ํ๋ Hook์.useEffect
์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ํจ์์ด๋ฉฐ, ํด๋น ํจ์ ๋ด์์ Side Effect๋ฅผ ์คํํ๋ฉด ๋จ์คํ๋๋ ๋: ๋งค๋ฒ ์๋กญ๊ฒ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง๋ ๋ Effect Hook์ด ์คํ๋จ
์ปดํฌ๋ํธ ์์ฑ ํ ์ฒ์ ํ๋ฉด์ ๋ ๋๋ง
์ปดํฌ๋ํธ์ ์๋ก์ด props๊ฐ ์ ๋ฌ๋๋ฉฐ ๋ ๋๋ง
์ปดํฌ๋ํธ์ ์ํ(state)๊ฐ ๋ฐ๋๋ฉฐ ๋ ๋๋ง
์ฃผ์ํ ์
์ต์์์์๋ง Hook์ ํธ์ถ
React ํจ์ ๋ด์์ Hook์ ํธ์ถ
(2) ์กฐ๊ฑด๋ถ effect ๋ฐ์ (dependency array)
useEffect
์ ๋ ๋ฒ์งธ ์ธ์๋ ๋ฐฐ์ด์ด๋ฉฐ, ์ด ๋ฐฐ์ด์ ์กฐ๊ฑด์ ๋ด๊ณ ์์.์ฌ๊ธฐ์ ์กฐ๊ฑด์ ์ด๋ค ๊ฐ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ๋๋ฅผ ์๋ฏธํ๋ฉฐ ํด๋น ๋ฐฐ์ด์๋ ์ด๋ค ๊ฐ์ ๋ชฉ๋ก์ด ๋ค์ด๊ฐ โ ์ข ์์ฑ ๋ฐฐ์ด
(3) API
useEffect
์ ๋ ๋ฒ์งธ ์ธ์๋ ์ข ์์ฑ ๋ฐฐ์ด๋ฐฐ์ด ๋ด์ ์ข ์์ฑ 1, ๋๋ ์ข ์์ฑ 2์ ๊ฐ์ด ๋ณํ ๋ ์ฒซ ๋ฒ์งธ ์ธ์์ ํจ์๊ฐ ์คํ๋จ
๋ฐฐ์ด ๋ด์ ์ด๋ค ๊ฐ์ด ๋ณํ ๋๋ง (effect๊ฐ ๋ฐ์ํ๋) ํจ์๊ฐ ์คํ๋จ
(4) ๋จ ํ ๋ฒ๋ง ์คํ๋๋ Effect ํจ์
์ข
์์ฑ ๋ชฉ๋ก์ ์๋ฌด๋ฐ ์ข
์์ฑ๋ ์๋ค๋ฉด?
๋น ๋ฐฐ์ด ๋ฃ๊ธฐ
useEffect(ํจ์, [])
: ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ์์ฑ๋ ๋๋ง effect ํจ์ ์คํ๋๋ฉฐ, ์ธ๋ถ API๋ฅผ ํตํด ๋ฆฌ์์ค๋ฅผ ๋ฐ์์ค๊ณ ๋์ด์ API ํธ์ถ์ด ํ์ํ์ง ์์ ๋ ์ฌ์ฉ ๊ฐ๋ฅ์๋ฌด๊ฒ๋ ๋ฃ์ง ์๊ธฐ
useEffect(ํจ์)
(5) Data Fetching: ๋ชฉ๋ก ๋ด ํํฐ๋ง ๊ตฌํํ๊ธฐ
์ปดํฌ๋ํธ ๋ด ํํฐ๋ง
์ ์ฒด ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ณ , ๋ชฉ๋ก์ ๊ฒ์์ด๋ก filtering
์ฅ์ : HTTP ์์ฒญ ๋น๋๋ฅผ ์ค์ผ ์ ์์
๋จ์ : ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ฏ๋ก ํด๋ผ์ด์ธํธ ๋จ์ ๋ถ๋ด ์ฆ๊ฐ
์ปดํฌ๋ํธ ์ธ๋ถ์์ ํํฐ๋ง: ์ปดํฌ๋ํธ ์ธ๋ถ๋ก API ์์ฒญ ์, ํํฐ๋งํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๊ธฐ
์ฅ์ : ํด๋ผ์ด์ธํธ๊ฐ ํํฐ๋ง ๊ตฌํ ํ์ X
๋จ์ : ๋น๋ฒํ HTTP ์์ฒญ์ด ์ผ์ด๋ ์๋ฒ๊ฐ ํํฐ๋ง์ ์ฒ๋ฆฌํ๋ฏ๋ก ์๋ฒ์ ๋ถ๋ด ์ฆ๊ฐ
3. AJAX
(1) AJAX ์์ฒญ ๋ณด๋ด๊ธฐ
fetch API๋ฅผ ์จ์ ์๋ฒ์ ์์ฒญํ๋ฉด, API ์ ์์ด ๋๋ฆด ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด ๋ก๋ฉ ํ๋ฉด(loading Indicator) ๊ตฌํ ํ์
fetch ์์ฒญ ์ ํ๋ก setIsLoading์ ์ค์ ํด ๋ณด๋ค ๋์ UX ๊ตฌํ
Last updated