> workspace ํด๋๋ก ์ด๋
> npm install -g yarn
> npm -v
npm : ์ด ์์คํ
์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์์ผ๋ฏ๋ก...
> get-ExecutionPolicy
Restricted : default์ค์ ๊ฐ์ผ๋ก, ์คํฌ๋ฆฝํธ ํ์ผ์ ์คํํ ์ ์์.
> set-ExecutionPolicy RemoteSigned
> npm install -g yarn
> yarn -v
> yarn global add create-react-app
windows ๋ณด์์์ ๋์ฌ์จ์ด ์ค์ ๋๊ธฐ
> yarn create react-app app
> cd app
> git clone์ ๋ฐ์๋ค๋ฉด yarn add react-scripts
> yarn start
ํ์ด์ง์ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋๊ณ , ์์ ๋๊ณ , ์ฌ๋ผ์ง๋ ์์๋ฅผ ์๋ฏธํ๋ค.
React์์ ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด, 9๊ฐ์ ๋ฉ์๋๋ฅผ ํตํด
์์
ํ๋ฆ์ ์ ์ดํ ์ ์๋ค.
will ๋ฌธ๊ตฌ๊ฐ ํฌํจ๋ ๋ฉ์๋๋ ์์
์ ์ ์๋ฏธํ๋ฉฐ,
Did ๋ฌธ๊ตฌ๊ฐ ํฌํจ๋ ๋ฉ์๋๋ ์์
ํ๋ฅผ ์๋ฏธํ๋ค.
๋ง์ดํธ -> ์
๋ฐ์ดํธ -> ์ธ๋ง์ดํธ
๋ง์ดํธ(mount) ํ์ด์ง์ ์ปดํฌ๋ํธ๊ฐ ๋ํ๋๋ ๊ฒ.
constructor: ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ๋๋ง๋ค ์คํ
โ
getDerivedStateFromProps: props๋ฅผ state์ ๋ฃ์ ๋ ์ฌ์ฉ, ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋์ ์
๋ฐ์ดํธ ๋ ๋ ์คํ
โ
render: ์ค๋นํด๋์ UI๋ฅผ ๋๋๋งํ ๋ ์ฌ์ฉ
โ
componentDidMount: ํ์ด์ง์ ์ปดํฌ๋ํธ๊ฐ ๋ํ๋ ํ ์คํ
์ ๋ฐ์ดํธ(update) 1. props ๊ฐ์ ๋ณํ๊ฐ ์์ ๋ 2. state ๊ฐ์ ๋ณํ๊ฐ ์์ ๋ 3. ๋ถ๋ชจ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋ง๋ ๋ 4. forceUpdate()๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ก ๋๋๋ง์ ํ ๋
1. 2. 3. 4. ์ ๋ฐ๋ฅธ ๋ณํ
โ
getDerivedStateFromProps: props์ ๋ณํ์ ๋ฐ๋ผ state ๊ฐ์๋ ๋ณํ๋ฅผ ์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉ
โ
shouldComponentUpdate: true ๋ฆฌํด ์ ๋ค์ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋ ๊ณ์ ์คํ, false ๋ฆฌํด ์ ์์
์ค์ง
โ
render: ์ปดํฌ๋ํธ ๋ฆฌ๋๋๋ง
โ
getSnapshotBeforeUpdate: ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ์ง์ ์ ์คํ
โ
componentDidUpdate: ์ปดํฌ๋ํธ ์
๋ฐ์ดํธ ํ ์คํ
์ธ๋ง์ดํธ(unmount) ์ปดํฌ๋ํธ๊ฐ ํ์ด์ง์์ ์ฌ๋ผ์ง๋ ๊ฒ.
componentWillUnmount: ์ปดํฌ๋ํธ๊ฐ ํ์ด์ง์์ ์ฌ๋ผ์ง๊ธฐ ์ง์ ์ ์คํ
์
๋ ฅ์ ๋ฐ์์ ์
๋ ฅ๋ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๋ ํจ์๋ฅผ ์ฐธ์กฐ์ ํฌ๋ช
ํ๋ค๊ณ ํ๋ฉฐ ์์ ํจ์(pure function)๋ผ๊ณ ํ๋ค.
ํ์ง๋ง ์
๋ ฅ์ ๋ฐ์์ ๋ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๊ฑฐ๋ ์ธ๋ถ ํจ์์ ์ํฅ์ ๋ผ์น๋ ํจ์๋ฅผ ์ฐธ์กฐ์ ๋ถํฌ๋ช
ํ๋ค๊ณ ํ๋ค.
์ด๋ ๊ฒ ์์ ํจ์๊ฐ ์๋ ํจ์์์ Side-Effect๊ฐ ๋ฐ์ํ๋ค.
๋ฆฌ์กํธ๋ ๋ชจ๋ ํจ์๋ฅผ ์์ ํจ์๋ก ์ ์งํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ์ปดํฌ๋ํธ ์ฌ์ฌ์ฉ์ฑ์ด ์ข์์ง๊ณ
์ค๋ฅ ๊ฒ์ฌ ๋ฐ ํ
์คํธ๋ ์ข์์ง๋ค.
const Component({data}) {
return <p>data</p>;
}
ํจ์ ๋ด ํน์ ๋์์ด ํจ์ ์ธ๋ถ์ ์ํฅ์ ๋ผ์ณ, ํ๋ก๊ทธ๋จ์ ๋์์ ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ํ์.
์ด๋ฅผ ๋ฐ์์ํค๋ ๋ก์ง์ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐํ๋ฉด ์์ ํจ์ํ๊ฐ ๊ฐ๋ฅํ๋ค.
1. setTimeout, setInterval
์์ธกํ๊ธฐ ์ด๋ ค์ด ํจ์ ์ข
๋ฃ ํ ์์ ์์ ์ด๋ค ์์
์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
2. ์๋ฒ ํต์
์ฌ์ฉ์๊ฐ ์์ฒญํ์ ๋ ์ดํ ๋๋ ์ง์ ์ ์ด๋ค ์์
์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
Side-Effect๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ์ฌ ์ปดํฌ๋ํธ๊ฐ ์ต๋ํ ์์ ํจ์๋ฅผ ์ ์งํ ์ ์๋๋ก ๋์์ฃผ๋ ํจ์
useEffect()๋ ๋๋๋ง์ด ๋ชจ๋ ๋๋ ๋ค์์ ์คํ๋๋ค.
๋๋๋ง ๋ ๋ ๋ง๋ค ์คํ
useEffect(() => {})
์ต์ด ๋๋๋ง(๋ง์ดํธ)ํ ๋๋ง ์คํ
useEffect(() => {}, [])
ํน์ ์ปดํฌ๋ํธ ๋ณ๊ฒฝ ์ ์คํ
useEffect(() => {}, [state])
์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ, ๋ฆฌ์กํธ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ JS์ฝ๋์์ ์๋๋๋ค.
Flux ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์ ๋จ๋ฐฉํฅ์ผ๋ก ๋์ํ์ฌ,
ํ๋ฆ์ ํ์
ํ๊ธฐ ์ฝ๊ณ ์์ธก ๊ฐ๋ฅํ๋ค.
Action์ด ๋ฐ์ํ๋ฉด Dispatcher๋ฅผ ํตํด Store์ ๋ณ๊ฒฝ๋ ๊ฐ์ด ์ ์ฅ๋๋ค.
View -> Action -> Dispatcher -> Store
โ_______________________________โ
Flux์๋ ๋ค๋ฅด๊ฒ ํ๋์ App์ ํ๋์ Store๊ฐ ์กด์ฌํ๊ณ , Flux ํจํด์ ์ข ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Components -> Action -> Reducer -> Store -> State
โ_________________________________________โ
1. ์ปดํฌ๋ํธ(Components)
Action์ด ๋ฐ์ํ๋ค.
๋์ค์ ๋ณ๊ฒฝ๋ state๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด์ Store๊ฐ subscribe(๊ตฌ๋
)์ ํด๋๋๋ค.
2. ์ก์
(Action)
๋ณํ๊ฐ ํ์ํ ๋ ๋ฐ์์ํค๋ ์ ํธ.
dispatch()๋ก ๊ฐ์ธ์ Reducer๋ก ์ ๋ฌ๋๋ค.
Action์๋ type(๊ตฌ๋ถ์ )์ ํ์๋ก ๋ด๊ณ ํ์ํ ๋ฐ์ดํฐ(ํ๋ผ๋ฏธํฐ)๊ฐ ์๋ค๋ฉด ๊ฐ์ด ๋ด๊ธด๋ค.
์ดํ ๋ฆฌ๋์์ ์ ๋ฌ๋๊ธฐ ์ ์ Store์์ state๋ฅผ ๊ฐ์ ธ์ Action๊ณผ ํจ๊ป ๋ฆฌ๋์์ ์ ๋ฌ๋๋ค.
3. ๋ฆฌ๋์(Reducer)
์ ๋ฌ๋ฐ์ Action์์ type์ ๊ฐ์ ธ์จ ๋ค ๊ตฌ๋ถํ์ฌ state๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฑ
์๋ง๋ ๋ก์ง(ํจ์)์ด ์คํ๋๋ ์์ ํจ์์ด๋ค.
4. ์คํ ์ด(Store)
state๋ฅผ ์ ์ฅํ๋ ์ ์ฅ์์ด๋ฉฐ,
subscribe ํด๋์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ๋ณ๊ฒฝ๋ state ๊ฐ์ ์ ๋ฌํด์ค๋ค.
์ปดํฌ๋ํธ์ ๊ฐ์๊ฐ ๋์ด๋๊ณ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๋ฉด, ๊ด๋ฆฌํด์ผ ํ๋ state๊ฐ ๋์ด๋๊ณ ,
์ด๋ฅผ props๋ก ๊ณ์ ์ ๋ฌํ๋ค๋ณด๋ฉด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์ ๋ฌ์ ๋ชฉ์ ์ผ๋ก ํ๋ props์ ๊ฐ์๊ฐ
๋์ด๋๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์ ์ด๋ค. ๋ํ props ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ฒ ๋๋ค๋ฉด ๋ชจ๋ props ์ด๋ฆ์ ์์ ํด์ผ ํ๋ฏ๋ก
์ ์ง๋ณด์ ๋ฐ ์ฝ๋ ๊ด๋ฆฌ๊ฐ ์ข์ง ์๋ค.
๋ฐ๋ผ์ Redux ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ํ๋์ store์ ๋ชจ๋ state์ ๋ก์ง์ ์ ์ฅํ ์ ์์ผ๋ฉฐ,
์ํ๋ ์ปดํฌ๋ํธ์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค. ๋ํ ๋ก์ง์ ๋ฐ๋ก ๋ถ๋ฆฌํ์ฌ ๋ถ์
์ด ๊ฐ๋ฅํ๊ณ ๋จ๋ฐฉํฅ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์
ํ๋ฆ์ ์์ธกํ๊ธฐ ์ฝ๋ค.
ํ์ง๋ง ์ปดํฌ๋ํธ ๊ตฌ์กฐ๊ฐ ๋จ์ํ๊ณ ์๊ท๋ชจ ํ๋ก์ ํธ์ผ ๊ฒฝ์ฐ ๊ตณ์ด Redux ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ์ ์์ผ๋ฉฐ,
๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ์คํ๋ ค ๋ณต์กํด์ง ์ ์๊ธฐ ๋๋ฌธ์,
์ฌ๋ฌ ๊ณณ์์ ๊ณต์ฉ์ผ๋ก ์ฌ์ฉ๋๋ state๋ ์ด๊ธฐํ๋์ง ์๊ณ ๊ณ์ ์ ์ง๋์ด์ผ ํ๋ state์ผ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
1. 1๊ฐ์ App์ 1๊ฐ์ Store๋ง ์กด์ฌํด์ผ ํ๋ค.
์ฌ๋ฌ ๊ฐ์ Stroe๊ฐ ์์ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ฐพ์์ ์์ ํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ค์์ง๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ ๊ฐ์ reducer๋ฅผ ์กฐํฉํ์ฌ ํ๋์ Store๋ก ์์ฑํด์ผ ํ๋ฉฐ, ์กฐํฉํ ๋์๋
combineReducers()๋ฅผ ์ฌ์ฉํด์ ํ๋์ store๋ก ๋ฌถ์ด์ค๋ค.
2. state๋ ๋ถ๋ณ์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค.
๊ธฐ์กด์ state๋ ์์ ํ์ง ์๊ณ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ ๋ณ๊ฒฝ์ด ๊ฐ์ง๋๋ค.
๋ํ ๋ผ์ดํ์ฌ์ดํด์์ ์ด์ state ๊ฐ์ ๊ธฐ์ต์ํค๊ธฐ ์ํด์๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ
๋ถ๋ณ์ฑ์ ์ ์งํด์ผ ํ๊ณ , ๋ถ๋ณ์ฑ์ ๊ฐ์ ธ์ผ ํ๋ ์ด์ ๋ ์ข์ ์ฑ๋ฅ์ ์ํด์ ๊น์ ํ์์ด ์๋
์์ ํ์์ผ๋ก ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
3. ๋ฆฌ๋์๋ ๋ฐ๋์ ์์ ํจ์๋ก ๋ง๋ค์ด์ผ ํ๋ค.
์
๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ด ๋๊ฐ์์ผ ํ๋ฉฐ, state๋ ๋ณ๊ฒฝํ์ง ๋ง๊ณ action์ ํตํด
๋ณ๊ฒฝํ ์๋ก์ด state ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค ๋ฆฌํดํด์ผ ํ๋ค๋ ๋ป์ด๋ค.
date, random(), fetch() ๋ฑ๊ณผ ๊ฐ์ด ์คํํ ๋๋ง๋ค ๋ค๋ฅธ ๊ฒฐ๊ณผ ๊ฐ์ด ๋ํ๋๋ ์์
์
๋ฆฌ๋์ ํจ์ ๋ฐ์์ ์ฒ๋ฆฌํด์ฃผ์ด์ผ ํ๋ค.
์ด๋ฌํ ์์
์ ์ถํ ๋ฏธ๋ค์จ์ด์์ ์์
ํ๊ฒ ๋๋ค.
Redux์ ๊ธฐ๋ฅ์ ํ์ฅ์์ผ์ Action์ ์ ๋ฌ๋ฐ์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ค.
Reducer๋ก ๊ฐ๊ธฐ ์ ์ API ํธ์ถ ๋ฐ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ก์ง๋ค์ ์ฒ๋ฆฌํ ๋ค Reducer๋ก Action์ ์ ๋ฌํ์ฌ
state๊ฐ update๋๋ค. ์ด๋ก ์ธํด Reducer๋ ์์ ํจ์๋ฅผ ์ ์งํ ์ ์๊ฒ ๋๋ค.
์ฆ, Reducer๋ก ๊ฐ๊ธฐ ์ ์ ์๋ฒ์ ๋ฐ์ดํฐ ์์ฒญ์ ํด์ ๊ฐ์ ๊ฐ์ ธ์ค๋ผ๋ ๋ป์ด๋ค.
API
โ
Components -> Action -> Middleware -> Reducer -> Store -> State
โ_______________________________________________________โ
1. ์ปดํฌ๋ํธ(Components)
Action์ด ๋ฐ์ํ๋ค.
๋์ค์ ๋ณ๊ฒฝ๋ state๋ฅผ ๋ฐ์ํ๊ธฐ ์ํด์ Store๊ฐ subscribe(๊ตฌ๋
)์ ํด๋๋๋ค.
2. ์ก์
(Action)
๋ณํ๊ฐ ํ์ํ ๋ ๋ฐ์์ํค๋ ์ ํธ.
dispatch()๋ก ๊ฐ์ธ์ Reducer๋ก ์ ๋ฌ๋๋ค.
Action์๋ type(๊ตฌ๋ถ์ )์ ํ์๋ก ๋ด๊ณ ํ์ํ ๋ฐ์ดํฐ(ํ๋ผ๋ฏธํฐ)๊ฐ ์๋ค๋ฉด ๊ฐ์ด ๋ด๊ธด๋ค.
์ดํ ๋ฆฌ๋์์ ์ ๋ฌ๋๊ธฐ ์ ์ Store์์ state๋ฅผ ๊ฐ์ ธ์ Action๊ณผ ํจ๊ป middleware๊ฐ ์๋ํ๋ค.
3. ๋ฏธ๋ค์จ์ด(Middleware)
Action๊ณผ state๋ฅผ ์ ๋ฌ๋ฐ์์ Side Effect ์ฝ๋๋ฅผ ์คํํ๋ค.
์ดํ Action๊ณผ state๋ฅผ ๋ฆฌ๋์๋ก ์ ๋ฌํ๋ค.
4. ๋ฆฌ๋์(Reducer)
์ ๋ฌ๋ฐ์ Action์์ type์ ๊ฐ์ ธ์จ ๋ค ๊ตฌ๋ถํ์ฌ
state๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฑ ์๋ง๋ ๋ก์ง(ํจ์)์ด ์คํ๋๋ค.
5. ์คํ ์ด(Store)
state๋ฅผ ์ ์ฅํ๋ ์ ์ฅ์์ด๋ฉฐ,
subscribe ํด๋์ ์ปดํฌ๋ํธ๋ก ๊ฐ์ ๋ณ๊ฒฝ๋ state ๊ฐ์ ์ ๋ฌํด์ค๋ค.
Component์์ ๋ฒํผ์ ํด๋ฆญํด์
ํด๋น ์ก์
์ด ๋ฐ์ํ๊ณ
์ก์
์ ๋ฏธ๋ค์จ์ด๊ฐ ๊ฐ๋ก์ฑ์
type์ด "๊ฐ์ ธ์ ์๋ฒ ๋ฐ์ดํฐ!"์ผ ๋
type์ ๋ง๋ saga ํจ์๊ฐ ์คํ๋์ด API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ,
๊ฐ์ ธ์จ ๋ฐ์ดํฐ์ type์ reducer์๊ฒ ์ ๋ฌํ์ฌ ๊ทธ ๋ค์ ์ด๋ค ๋ก์ง์ ์ํํ ์ง ์๊ฒ ํ๊ณ ,
store์ state์ ๋ฏธ๋ค์จ์ด์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๊ณ ,
๊ตฌ๋
ํ Component์ state๋ฅผ ์ ๋ฌํด์ค๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ URL์ ๋ถ์ํ์ฌ ์๋ง๋ ํ์ด์ง๋ก ์๋ตํ๋ ๊ฒ.
์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ๋ ์ฌ์ฉํ๋ค.
์ฌ๋ฌ ๊ฐ์ ํ์ด์ง๋ก ์ด๋ฃจ์ด์ง ํํ์ด์ง์ด๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ์์ ๋๋๋งํ ๋ค ํด๋ผ์ด์ธํธ์ ์๋ตํด์ฃผ๋
SSR(Server Side Rendering) ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๋งค๋ฒ ์ด๋ ์ ์๋ก๊ณ ์นจ๋๊ธฐ ๋๋ฌธ์ ๊น๋นก์ ํ์์ด ๋ฐ์ํ ์ ๋ฐ์ ์๋ค.
Component์์ ๋ฒํผ์ ํด๋ฆญํด์
ํด๋น ์ก์
์ด ๋ฐ์ํ๊ณ
์ก์
์ ๋ฏธ๋ค์จ์ด๊ฐ ๊ฐ๋ก์ฑ์
type์ด "๊ฐ์ ธ์ ์๋ฒ ๋ฐ์ดํฐ!"์ผ ๋
type์ ๋ง๋ saga ํจ์๊ฐ ์คํ๋์ด API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ,
๊ฐ์ ธ์จ ๋ฐ์ดํฐ์ type์ reducer์๊ฒ ์ ๋ฌํ์ฌ ๊ทธ ๋ค์ ์ด๋ค ๋ก์ง์ ์ํํ ์ง ์๊ฒ ํ๊ณ ,
store์ state์ ๋ฏธ๋ค์จ์ด์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๊ณ ,
๊ตฌ๋
ํ Component์ state๋ฅผ ์ ๋ฌํด์ค๋ค.
ํ๋์ ํ์ด์ง๋ก ์ด๋ฃจ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ฏธํ๋ฉฐ,
ํ์ด์ง๋ฅผ ๋ฑ ํ ๊ฐ๋ง ๋ฐ์์จ ๋ค ํ์ํ ๋ฐ์ดํฐ๋ง ๋ฐ์์์ ํ๋ฉด์ ์
๋ฐ์ดํธํ๋ ๊ฒ.
๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๊ฒฝ๋ก๊ฐ ๋ฐ๋๋ฉฐ ํ์คํ ๋ฆฌ์๋ ๋จ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ ์
์ฅ์์๋
์ฌ๋ฌ ํ์ด์ง๊ฐ ์กด์ฌํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค.
ํ์ง๋ง ๊ฒฝ๋ก๊ฐ ๋ฐ๋์ด๋ ์ฃผ์์ฐฝ์ ๊ฒฝ๋ก๋ง ๋ณ๊ฒฝ๋๊ณ ๊ธฐ์กด ํ์ด์ง๋ ์ ์งํ๋ฉฐ
๋ค๋ฅธ ํ์ด์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ ๊ฒ์ด๋ค.
CSR(Client Side Rendering) ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
ํ์ด์ง ์ด๋(๋ถ๋ฌ์ค๊ธฐ)์ ๋ํ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๋ค. ๊ทธ๋ฌ๋ ๋น์ด ์๋ HTML๋ฌธ์๊ฐ ๋จผ์ ๋์ฐฉํ ๋ค
JS ์ฐ์ฐ ๋ฐ ๋ฐ์ดํฐ ์์ฒญ์ด ์์๋๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ๋ถ์ ๋๋ ๊ฒ์ ์์ง ์ ์ฉ์ด ์ด๋ ต๋ค.
1. BrowserRouter๋ก ๊ฐ์ธ๊ธฐ
2. Routes๋ก ๊ฐ์ธ๊ธฐ
3. Route๋ก ๊ฒฝ๋ก ๋ฐ ์คํํ ์ปดํฌ๋ํธ ์ค์ ํ๊ธฐ
4. Link๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ํ๊ธฐ
- URL ํ๋ผ๋ฏธํฐ(useParams())
URL์ ๊ฒฝ๋ก๋ก ์์ฑํ์ฌ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์
- ์ฟผ๋ฆฌ ์คํธ๋ง(useSearchParams())
URL ๊ฒฝ๋ก ๋ค์ ?๋ก ์์ํ์ฌ key=value ํ์์ผ๋ก ๊ฐ์ ์ ๋ฌํ๊ฑฐ๋
๊ฐ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ &๋ฅผ ์ฐ๊ฒฐํ์ฌ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ์
- ์ฃผ์ฒด : ํด๋ผ์ด์ธํธ๊ฐ ๋ ๋๋ง์ํ๋ค โ ํด๋ผ์ด์ธํธ = ๋ธ๋ผ์ฐ์
- ํ๋ก ํธ์๋ ์๋ฒ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ์(๋ชจ๋ ํ์ด์ง)
- ๋นํ๋ฉด โ ๊ฐ์ ธ์จ ๋ฆฌ์์ค๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ์๊ฐ ์์ฒญํ ํ์ด์ง๋ฅผ ๋ ๋๋ง
- ์ฒ์ ๋ ๋๋ง ์์ ์ ๋นํ๋ฉด์ ๊ฒ์์์ง ์ต์ ํ(SEO)์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์
- ํ์ด์ง์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ์ ๋ถ ์ฌ์ ์ ๋ถ๋ฌ์ ๋ฐ์ดํฐ๋ฅผ ์บ์ฑํ๊ณ ์๋ค๊ฐ ํ์ฌ URL์ ๋ง๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋๋๋ง ์ดํ ์๋๊ฐ ๋น ๋ฅด๋ค(์ฒ์ ์์ฒญ์ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์๋ฒ์ ๋ค๋ฅธ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ต์ด ๋น ๋ฆ)
- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ ๋๋ก ํ์ด์ง๋ฅผ ๋ ๋๋ง ํ๊ธฐ ๋๋ฌธ์ ๋ฐฑ์๋์ ๋ฐ์ดํฐ ํต์ ๋ ์ง์ ํ๋๋ฐ ์ด ๋ ๋ฐฑ์๋์ ์์ง ์ ๋ฌ๋ฐ์ง ๋ชปํ ์ฌ์ง๊ฐ์ ๋ถ๋ถ์ ๋น์ํ๋ก ๋๋จธ์ง ๋ถ๋ถ์ ๊ทธ๋ ค์ง๊ณ ํต์ ์ด ์๋ฃ๋๋ฉด ์ฌ์ง์ด ๋ณด์ฌ์ง๊ฒ ๋๋๊ฒ์ด๋ค.
- ์ฃผ์ฒด : ์๋ฒ๊ฐ ๋ชจ๋ ํ๋ฉด์ ๋ง๋ค์ด ํด๋ผ์ด์ธํธ์ ์ ๋ฌ โ ํด๋ผ์ด์ธํธ ์ฒ์ ๋ ๋๋ง์ ๋ฐ๋ก ํํ๋ฉด
- ํ์ด์ง ์ด๋ ์์ฒญ ํ๋๋ง๋ค ํ๋ก ํธ์๋ ์๋ฒ๊ฐ ๋ฐฑ์๋์๋ฒ๋ ํต์ ํด ํ์ด์ง ํ๋๋ฅผ ์๋ก ๊ทธ๋ ค์ ๋ณด๋ด๋ฏ๋ก ์ฒซ ํ์ด์ง๋ ๋ก๋ฉ์ด ๋น ๋ฅผ ์ ์์ง๋ง ํ์ด์ง ์ด๋์ ์๋๊ฐ CSR๋ณด๋ค ๋๋ฆฌ๋ค.
- ์๋ฒ๊ฐ ๋ชจ๋ ํ๋ฉด์ ๋ง๋ค์ด ์ ์ ์ธ ํ์ด์ง๋ฅผ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ฌ์ง๊ฐ์๊ฒ์ด ๋์ค์ ๋ณด์ฌ์ง ์ผ์ด ์๋ค. โ ์์ ํ ํ์ด์ง ๋ก๋ฉ์ CSR๋ณด๋ค ๋น ๋ฅด๋ค.
- SEO์ ์ ๋ฆฌํ๋ค
- ์๋ฒ์์ ๋๋๋ง์ ๋ถ๋ดํ๊ธฐ ๋๋ฌธ์ ํ๋์จ์ด์ ์์กดํ์ง ์๋๋ค.
- ์๋ฒ์ ๋ถ๋ด์ด ์๊ธฐ๊ณ SSR์ ์ํ ์ฝ๋์์ฑ์ด ํ์ํ๋ฏ๋ก ์์ฐ ๋น์ฉ์ด ์ฆ๊ฐ๋๋ค.
- ํ์ด์ง๋ฅผ ์์ฑํ๋ ์ฃผ์ฒด (client, server)
- ๋นํ๋ฉด, ์์ฑ๋ ํ๋ฉด
- ์บ์ฑ, ์ฌ์์ฒญ
- ๋ฆฌ์กํธ์ ์ํ๊ด๋ฆฌ ํจ์
- ๋ฆฌ์กํธ๋ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ด์ผ ๋ณ๊ฒฝ๊ฐ์ง๋ฅผ ์ธ์ํ๊ณ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋๋ํ๋ค.(๋น๋๊ธฐ)
- ํด๋น ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋ ๋ ์ต์ด ํ๋ฒ ์คํํ ์ํ๊ฐ์ ์บ์ฑํด ๋๋๋ค.
- ๋ฐํ๊ฐ์ ๋ฐฐ์ด์ธ๋ฐ ์ฒซ๋ฒ์งธ ์์๋ ์ ๋ฌํ ์ด๊ธฐ๊ฐ์ด๊ณ ๋๋ฒ์งธ ํจ์๋ ์ํ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ setterํจ์์ด๋ค.
- setterํจ์๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ ๋๋ ์ฝ๋ฐฑํจ์ ๋๋ ๋๋ค ์ ๋ฌํ ์ ์๋๋ฐ ๊ฐ๋ง ์ ๋ฌํ๋ฉด ์ด์ ์ ์บ์ฑํด๋์ ์ํ๊ฐ๊ณผ ๋น๊ตํด ๋ณ๊ฒฝ์ด ์์๊ฒฝ์ฐ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋๋ํ๋ค. ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํ๋ฉด ์ธ์๋ก ์ต๊ทผ ์ํ๊ฐ์ ๋ฐ๊ณ ๋ฆฌํด๊ฐ์ ์ต๊ทผ ์ํ๊ฐ์ผ๋ก ์ ์ฅํํ ๋ฆฌ๋๋ํ๋ค.
- ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋๋๋๋ฉด ํด๋น ์ปดํฌ๋ํธํจ์์ ์์ ์ปดํฌ๋ํธ ํจ์๋ค์ ์ฌ์คํํ๋ค.
- ์ฃผ์
- ํ ์ด๋ฒคํธ ๋ด์์ ๋๊ฐ์ด์์ setํจ์ ์ฌ์ฉ์ ๋ง์ง๋ง set๋ง ์์ฉ
- ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํด ์ด์ ๊ฐ์ ๋ฐ๋ setํจ์๋ ๋๊ธฐ์ ์ผ๋ก ์๋ํจ โํด๊ฒฐ
- setํจ์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋๊ธฐ์ ์ ๋ฐ์ ๋๊ธฐ์ ์ฝ๋๋ฅผ ์ํํด ๋ปํ์ง ์์ ๊ฒฐ๊ณผ ๊ฐ์ ์ป์ ์ ์์
- useEffect๋ฅผ ์ฌ์ฉํด ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ํํ ๋ก์ง ์ํ โ ํด๊ฒฐ
- ํ ์ด๋ฒคํธ ๋ด์์ ๋๊ฐ์ด์์ setํจ์ ์ฌ์ฉ์ ๋ง์ง๋ง set๋ง ์์ฉ
- ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ ์์ฑ๊ด๋ฆฌ ํจ์
- ๋ฆฌ์กํธ์ ๋ฆฌ๋๋์ ์ํฅ์ ๋ฐ์ง์๋ ์์ฑ์ ๊ด๋ฆฌํ๋ค.
- ๊ฐ์ด ๋ณ๊ฒฝ๋์ด ์ ์ฅํ๋๋ผ๋ ๋ฆฌ๋๋ํ์ง ์๊ณ ๋ฆฌ๋๋ ๋๋๋ผ๋ ๊ฐ์ด ์ด๊ธฐํ๋์ง ์๋๋ค.
- ์ปดํฌ๋ํธ ref์์ฑ์ํตํด ๋์์๋ฅผ ๋ด์ ์ ๊ทผํ ์ ์์ง๋ง ๊ถ์ฅํ์ง ์๋๋ค.
- ์ ๋ฌ๋ฐ์ ์ด๊ธฐ๊ฐ์ current ์์ฑ์ ๋ด์ ๊ฐ์ฒด๋ก ๋ฐํ
- ๋ฆฌ์กํธ์ ํน์ ๊ฐ ์บ์ฑ ๊ด๋ฆฌ ํจ์
- ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํ๊ณ ์ปดํฌ๋ํธ๊ฐ mount๋ ๋ ์ฒ์ ์ฐ์ฐ ์งํํ๊ณ ๋ฆฌํด๊ฐ์ ์บ์ฑํ ํ ๋ ๋๋ง๋์์๋ ์ฐ์ฐ์ ์งํํ์ง์๊ณ ์บ์ฑํ ๊ฐ์ ๊ทธ๋๋ก ๋ค๊ณ ์์
- ๋๋ฒ์งธ ์ ๋ฌํ๋ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์ฌ์ฐ์ฐ ์ดํ ๋ฆฌํด๊ฐ์ ์ฌํ ๋น
- ์บ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฝ์คํธ๋ฅผ ๋จน๊ธฐ๋๋ฌธ์ ํจ์ ์ฐ์ฐ ์ฝ์คํธ์ ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ ์ฝ์คํธ๋ฅผ ๊ณ ๋ คํด ๊ณ ๋ฏผํด๋ณผ ํ์๊ฐ ์์.
- ๋ณดํต 5์ n์ ๊ณฑ์ ๋์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ ์ฐ์ฐ์ด๋ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์บ์ฑ์ด ํจ์จ์ ์ผ ์ ์์
- ๋ฆฌ์กํธ์ ํน์ ํจ์ ์บ์ฑ ๊ด๋ฆฌ ํจ์
- ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํ๊ณ ์ปดํฌ๋ํธ๊ฐ mount๋ ๋ ์ฒ์ ์ ์ธํด ์บ์ฑํ ํ ๋๋๋ง ๋์ด๋ ์ฌ ์ ์ธํ์ง ์์
- ๋๋ฒ์งธ ์ ๋ฌํ๋ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ํจ์๋ฅผ ์ฌ์ ์ธํด ์ฌ์บ์ฑํจ
- ๋ง์ฐฌ๊ฐ์ง๋ก ์บ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฝ์คํธ๋ฅผ ๋จน๊ธฐ ๋๋ฌธ์ ํจ์๋ฅผ ์ฌ์ ์ธํ๋ ์ฐ์ฐ ์ฝ์คํธ์ ์บ์ฑํด๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฝ์คํธ๋ฅผ ๊ณ ๋ คํด ์ฌ์ฉํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํด์ผํจ.
- ๋ฆฌ์กํธ์ ์ํ ๋ณ๊ฒฝ ์ดํ ๋ค๋ฃจ๋ ๋ถ์ํจ๊ณผ(side Effect)๋ฅผ ๊ด๋ฆฌํ๋ ํจ์
- ์ปดํฌ๋ํธ์ ์์ ์ฃผ๊ธฐ(๋ผ์ดํ์ฌ์ดํด)๋ ๊ด๋ฆฌํ๋ ํจ์
- useEffect์ ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋๋ ์์
- ์ปดํฌ๋ํธ๊ฐ mount(์์ฑ)๋์์๋ ์คํ๋๋ฉฐ ์ฃผ๋ก ์ ๋ฌ๋ฐ์ props๋ก์ปฌ ๋ณ์๋ก ์ด๊ธฐํ, setInterval ์คํ ๋ฑ ์ปดํฌ๋ํธ๊ฐ ์์ฑ๋์๋ง์ ํ์ํ ๋ก์ง์ ์ํ
- ์์กด์ฑ ๋ฐฐ์ด์ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ก์ง์ ์ํ
- ์ปดํฌ๋ํธ๊ฐ unmount(์ ๊ฑฐ)๋์์๋ return๋ฌธ ์คํ ์ฃผ๋ก clearInterval,๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ธ์คํด์ค ์ ๊ฑฐ๋ฑ์ ๋ก์ง์ ์์ฑํ๋ค.
- ํน์ hookํจ์์ ๋๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ๋ ๋ฐฐ์ด
- ํด๋น ํ ํจ์๊ฐ ๋ฆฌ์กํธ ์ํ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ฆฌ๋ ๋๋งํ ๋ ์ํฅ์ ๋ฐ์ ์ํ ๋ณ์๋ฅผ ์ ์ฅ
- ์์กด์ฑ ๋ฐฐ์ด์์ ๋ค์ด์๋ ์ํ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ํด๋น ํ ํจ์๊ฐ ์ฌ์คํ
- ๋ ๋๋ง์ ๊ด๋ จ๋ ๊ฐ์ด ์ปดํฌ๋ํธ ์ํ๊ฐ์ด๋ฉฐ ์ด ๊ฐ๋ง deps์ ๋ค์ด๊ฐ๋๊ฒ์ด ์๋ฏธ๊ฐ ์๋ ๊ฐ์ด๋ค.
- ๋ฐ๋ณต๋๋ ๋ก์ง์ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์๋ ์ฌ์ฉ์ ์ ์ ํ ํจ์
useState,ยuseEffect,ยuseReducer,ยuseCallbackย ๋ฑ Hooks ๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ฃผ๊ณ , ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฐ๋ค์ ๋ฐํํ๋ ํจ์๋ก ๋ง๋ฌ
- react์์ state๊ฐ ๋ฐ๋๋ ์กฐ๊ฑด์ state์ ๊ฐ ์์ฒด๊ฐ ๋ณํด์ผ ํ๋๋ฐ state๊ฐ ๊ฐ์ฒด์ผ ๊ฒฝ์ฐ ๊ฐ์ฒด ๋ด๋ถ์ ๊ฐ๋ง ๋ณ๊ฒฝ๋๋ค๋ฉด react์์ฒด ๋ด์์ deep equal์ ํตํด ํค๊ฐ์ ๋ฐธ๋ฅ๊ฐ ํ๋ํ๋๋ฅผ ๋น๊ตํ ๋ณ๊ฒฝ๋์๋ค๋ฉด state๊ฐ ๋ณ๊ฒฝ๋๊ฑธ๋ก ๊ฐ์ฃผํด ๋ฆฌ๋๋๋ง์ ํ๋ค.
- ํ์ง๋ง ์ด๋ ๋ถํ์ํ ์ฑ๋ฅ์ ํ๋ฅผ ๋ถ์ด์ผ์ผํค๊ณ ๋ํ ํ๋์ state๋ ๋ค์ํ ์ปดํฌ๋ํธ์์ ๊ตฌ๋ ํ๊ณ ์์ ๊ฐ๋ฅ์์ ์๋๋ฐ ์ฐธ์กฐ ๋ฐ์ดํฐ๊ฐ ์์ ๋๋ฉด ํ์ฌ ์ด ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ์ปดํฌ๋ํธ์์ ์์ธ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค. ์ฆ ์ฌ์ด๋์ดํํธ๊ฐ ์๊ธธ ์ ์๋ค.
- ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด state์ ๋ถ๋ณ์ฑ์ ์ง์ผ์ฃผ๊ธฐ ์ํ์ฌ ํญ์ setter์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ทธ ๊ฐ์ฒด์ ๊ฐ์ ๋ด์ ๋ฆฌํดํ๊ฒํ๋ ๊ฒ์ด ์ข๋ค.