๐ ๋ฆฌ์กํธ์ ๊ธฐ๋ณธ ์๋ฆฌ
๋ฉด์ ์ ํตํด ๋ฆฌ์กํธ์ ๊ธฐ๋ณธ๋๋ ์ง๋ฌธ๋ค์ ๋ฐ์์ ๋ ์๋ค๋ผ๊ณ ์์ ํ์์ง๋ง, ์ ๋๋ก ๋ต๋ณ์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๋ง์๋ค. ๋ฉด์ ์ ๊ธฐํ๋ก ๋ฆฌ์กํธ๋ฅผ ๋ ๊น์ด ์๊ฒ ์ดํดํ ์ ์๋๋ก ๊ธฐ๋ณธ๋ถํฐ ๋ค์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
๐ ๋ฆฌ์กํธ๋
๋ฆฌ์กํธ๋ UI๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๊ณ ์ ์ํ ์ ์๋ค. ๋ ๋ค๋ฅด๊ฒ ์ค๋ช
ํ์๋ฉด ์ปดํฌ๋ํธ๋ค์ ์งํฉ์ผ๋ก๋ ๋งํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ์ธ Props์ state์ ๋ํ ์ง๋ฌธ๊ณผ ์ปดํฌ๋ํธ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ๋ ์ง์ ๋ํด ์ง๋ฌธ์ ๋ฐ์์๋ค.
โ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ: Props์ State
์ปดํฌ๋ํธ๋ ๋ถ๋ชจ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ์์ ํ ์ ์๋ ๋ฐ์ดํฐ์ธ Props์ ์์ฒด์ ์ผ๋ก ๊ฐ์ง๋ฉฐ ์ ๋ฐ์ดํธ ํ ์ ์๋ ๋ฐ์ดํฐ์ธ State๊ฐ ์๋ค. ๋ ๊ฐ์ง ๋ฐ์ดํฐ์ ๋ณํ๋ ๋ฆฌ๋๋๋ง์ Trigger๊ฐ ๋์ด ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํ๊ฒ ๋๋ค. ์ด๋ ์ค์ํ ๊ฒ์ด ๋ ๋ฐ์ดํฐ์ ๋ณํ๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํด ๋ถ๋ณ์ฑ์ ์ง์ผ์ผ ํ๋ค๋ ์ ์ด๋ค.
์์ํ ํ์
์ ๊ฒฝ์ฐ ๊ฐ์ด ๋ณํ๋ฉด ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ณํ = ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ณํ๋ก ๋ณผ ์ ์๋ค. ํ์ง๋ง ๊ฐ์ฒด ํ์
์ธ ๊ฐ์ฒด, ๋ฐฐ์ด, ํจ์ ๋ฑ์ ์ค์ ๊ฐ์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฐธ์กฐ๊ฐ์ ๊ฐ์ ํ ๋นํ๊ณ , ์์ฑ ๊ฐ์ด ๋ณํํ๋ค๊ณ ํด์ ์๋ก์ด ์ฃผ์๋ก ํ ๋นํ์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด ํ์
์์ ๊ฐ์ ๋ณํ != ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ณํ๊ฐ ๋๋ค.
์ด์ ์ด ๋ฆฌ์กํธ์์ ์ค์ํ ์ด์ ๋ ๋ฐ์ดํฐ ๋ณํ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์์ ๋น๊ต๋ฅผ ์ํํ๋๋ฐ, ์์ ๋น๊ต๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ํ ๋น๋ ๊ฐ์ ๋น๊ตํด ์
๋ฐ์ดํธํด์ผ ํ ์ง๋ฅผ ํ์ธํ๊ธฐ ๋๋ฌธ์ด๋ค. ์์ํ ํ์
์ ๊ฒฝ์ฐ ๊ฐ์ ๋ณํ๊ฐ ๊ณง ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ ๋ณํ๊ฐ ๋์ง๋ง ๊ฐ์ฒด ํ์
์ ์์ฑ ๊ฐ์ด ๋ณํ๋ค๊ณ ํด์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ฐ์ ๋ณํ๊ฐ ๋๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ง์ state๋ฅผ ์์ ํด์๋ ์๋๋ค.
๊ฐ์ฒด์ ์์ฑ์ด ๋ฐ๋๋ฉด ๊ฐ์ฒด ์์ฒด์ ์ฐธ์กฐ ๊ฐ์ ๋ฐ๊ฟ์ฃผ๊ธฐ ์ํด์ spread operator, map, filter์ ๊ฐ์ด ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ๋ฐฉ์์ผ๋ก ์ํ๋ฅผ ๋ณํ์์ผ, ๋ฆฌ์กํธ์ ํจ์จ์ ์ธ ์ํ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋๋ค.
๐ ์ ์ด ์ปดํฌ๋ํธ์ ๋น์ ์ด ์ปดํฌ๋ํธ
์ ์ด ์ปดํฌ๋ํธ์ ๋น์ ์ด ์ปดํฌ๋ํธ๋ ๋ฉด์ ์์ ์ฒ์๋ค์ ๋จ์ด์๋ค. ๊ฐ๊ฐ์ ๋ํด ์ค๋ช
ํด ๋ณด๋ผ๋ ์ง๋ฌธ์ ๋ฐ๋ก ์ ๋ชจ๋ฅด๊ฒ ๋ค ํ์ง๋ง input๊ณผ form์ ์๊ฐํ๋ฉด ๋ตํ ์ ์์ ๊ฒ ๊ฐ๋ค๊ณ ํํธ๋ฅผ ์ฃผ์
์ ์ ์ด ์ปดํฌ๋ํธ์ ๋ํด์ ๋ง ์ค๋ช
ํ ์ ์์๋ค.
์ ์ด ์ปดํฌ๋ํธ
์ ์ด ์ปดํฌ๋ํธ๋ model์ ํด๋นํ๋ data, ์ฆ ์ํ์ ๋ฐ์ธ๋ฉ๋์ด ์ํ์ ๋ฐ๋ผ ๊ฐ์ด ๋ฐ๋๋ ์ปดํฌ๋ํธ๋ผ๊ณ ํ ์ ์๋ค. ์๋ก input์ ๊ฒฝ์ฐ ์ฌ์ฉ์์ ์
๋ ฅ์ ํตํด ์ํ๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์
๋ฐ์ดํธํ ์ํ๋ฅผ value์์ฑ์ผ๋ก ์ ๋ฌํด์ค ์ํ์ ํญ์ ๋๊ธฐํ๋ ์ ์๊ฒ ํ๋ค.
import { useState } from "react"
const App = () => {
const [value, setValue] = useState("")
const handleChange = e => {
setName(e.target.value)
}
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Enter Name"
value={value}
onChange={handleChange}
/>
<button>Add</button>
</form>
)
}
export default App์ต์ํ ์ ์ฝ๋ ๋ชจ์ต์์ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ฉด 1) ์ฌ์ฉ์๊ฐ ์
๋ ฅํ๋ค. 2) ์
๋ ฅ๋ ๊ฐ์ onChangeํจ์๋ฅผ ํตํด ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค. 3) ์ํ๋ฅผ value๋ก ๋ฐ์ํ๋ค ๋ก ์ธ๊ฐ์ง step์ผ๋ก ๋ณผ ์ ์๋ค.
๋น์ ์ด ์ปดํฌ๋ํธ
๋น์ ์ด ์ปดํฌ๋ํธ๋ ์ ์ด ์ปดํฌ๋ํธ์ ๋ฌ๋ฆฌ ์ ๋ ฅ์ ๋ฐ๋ผ ์ํ๋ฅผ ์ ๋ฐ์ดํธ ์ํค๊ณ ์ํ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฐ์ธ๋ฉํ๋ ๊ฒ์ด ์๋๋ผ, DOM์์์ ์ ๊ทผํด ์ ๋ ฅ๋ ๊ฐ์ ๋ฐ์์ค๋ ๋ฐฉ์์ด๋ค.
import { useRef } from "react"
const App = () => {
const inputRef = useRef()
const handleSubmit = event => {
event.preventDefault()
const name = inputRef.current.value
console.log("Input value - ", this.inputRef.current.value)
}
return (
<form onSubmit={handleSubmit}>
<div>
<label>Uncontrolled input </label>
<input type="date" name="data" id="date-input" ref={this.inputRef} />
</div>
<button type="submit">Submit</button>
</form>
)
}
export default App์ ์ฝ๋์์ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ฉด 1) ์ฌ์ฉ์๊ฐ ์
๋ ฅํ๋ค 2) ๋ฒํผ์ ๋๋ฅธ๋ค 3) submit์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ณ DOM์์์ ์ ๊ทผํด ๊ฐ์ ์ฝ์๋ก ํธ์ถํ๋ค๋ก ์ ๋ฆฌํ ์ ์๋ค.
์ด๋ ๊ฒ ๋ ๊ฐ์ง ๊ณผ์ ์ ๋น๊ตํด ๋ณด์์ ๋ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์ํ์ ๋๊ธฐํ๊ฐ๋๋ ์๋๋๋ผ๋ ์ ์ด๋ค. ์ ์ด ์ปดํฌ๋ํธ์ ๊ฒฝ์ฐ state๊ฐ ๋ฐ๋ ๋๋ง๋ค ๊ฐ์ด ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๋ฆฌ๋๋๋ง์ด ๊ณ์ํด์ ์ผ์ด๋๊ฒ ๋๋ ๋ฐ๋ฉด ๋น์ ์ด ์ปดํฌ๋ํธ๋ state์ ์๊ด์์ด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋๋ง ๊ฐ์ ์ฐธ์กฐํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ ์ค์ ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ ๋ง๊ฒ UI๋ฅผ ๋ณด์ฌ์ค์ผํ๋ ์๋๋๋ก ๊ตฌ๋ถํด์ ์ฌ์ฉํ ์ ์๋ค.
๐งจ ๋ฆฌ์กํธ์ re-rendering ์กฐ๊ฑด๊ณผ ๋ถํ์ํ re-rendering ๋ง๊ธฐ
Re-rendering์ ์กฐ๊ฑด์ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋ณผ ์ ์๋ค.
- Props์ State์ ๋ณํ
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ re-rendering
์์ ์ค๋ช
ํ Props๋ ๋ถ๋ชจ๋ก ๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ์ ๋ฌํ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฒดํ์
์ผ ๊ฒฝ์ฐ์ ๋ถ๋ชจ๊ฐ re-rendering๋์์ ๋ ํญ์ ์๋กญ๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค์ด์ ธ ์ ๋ฌ๋๋ค. ์๋ํ๋ฉด {}!=={}๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด๋ ํญ์ ์๋ก์ด ๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ก์ด ๊ฐ์ด props๋ก ์ ๋ฌ๋๋ฏ๋ก ์์ ์ปดํฌ๋ํธ์ re-rendering์ผ๋ก ์ด์ด์ง๋ค.
๋ฆฌ์กํธ๊ฐ ์ฑ๋ฅ ๋ณด์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ ์ด์ ๊ธ์ฒ๋ผ ๋ถํ์ํ ์์์ re-rendering์ ๋ง๊ธฐ ์ํด์๋ props๋ก ์ ๋ฌํ๋ ๋ณ์,ํจ์๊ฐ ํญ์ ์๋กญ๊ฒ ๋ง๋ค์ด์ง์ง ์์๋ ๋๋ค๋ฉด useMemo์ useCallback์ ํตํด ๋ฉ๋ชจ์ด์ ์ด์
์ ํ๊ณ dependency๊ฐ ๋ฐ๋ ๋๋ง ์๋กญ๊ฒ ์ ๋ฌํ๋ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ Memo๋ฅผ ์ด์ฉํด ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ Props์ ๋ณํ๊ฐ ์๋ค๋ฉด re-rendering์ ํ์ง ์๊ฒ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์๋ค.
๐ถ ๋ฆฌ์กํธ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ๊ณผ Flux ํจํด
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด๋ ๋จ์ด๋ ์ต๊ทผ ๋ฉด์ ์ ํตํด ์ฒ์ ๋ฃ๊ฒ ๋์๋ค. ์ฒ์ ๋ฃ๊ณ ๋นํฉํด์ ํน์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ํด ์กฐ๊ธ๋ง ๋ ์๋ ค์ฃผ์ค ์ ์์๊น์?๋ผ๊ณ ๋ค์ ์ฌ์ญค๋ดค๊ณ , ๋ฉด์ ๊ด๋๊ป์ ์น์ ํ์
์๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ผ๊น์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ผ๊น์๋ผ๊ณ ํ์ด์ ์ค๋ช
ํด์ฃผ์
จ๋ค. ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ๋ํด์ ์ฒ์ ๋ค์ด๋ณด์ง๋ ์์์ง๋ง ๋ถ๋ช
์ ๋ชฐ๋ผ์ ์๊ธด ํดํ๋์ด์๋ค.
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด๋ ํ์ด์ง์ ๋ณด์ฌ์ง View์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋จ๋ฐฉํฅ๊ณผ ์๋ฐฉํฅ์ผ๋ก ๋๋ ์ ์๋๋ฐ ๋จ๋ฐฉํฅ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํ ํ๋ฆฟ๊ณผ ํจ๊ป ๊ฒฐํฉํด ๋ทฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฏธํ๊ณ , ์๋ฐฉํฅ์ ๊ฒฝ์ฐ ๋จ๋ฑกํฅ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ํ ํ๋ฆฟ๊ณผ ํจ์ณ view๋ก ๋ฐ์ํ๋ ๊ฒ๊ณผ ํจ๊ป View ๋ณํ๋ฅผ ๋ฐ์ดํฐ์ ๋ฐ์ํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ด์ฉํ๋ค. ์ปดํฌ๋ํธ ๋ด๋ถ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ useState๋ฅผ ํตํด ์ํ๋ฅผ ๋ง๋ค๊ณ , ๋ง๋ ์ํ๋ฅผ JSX๋ฅผ ํตํด HTML(View)๋ก ๋ฐ์ํ๋ค. UI๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํด์๋ ์ด๋ฒคํธ๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ ํ ์ ์๋ค.
์ปดํฌ๋ํธ ๊ฐ์ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๊ฐ props๋ฅผ ํตํด ์ ๋ฌ๋๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ ๋ถ๋ชจ์ ์ํ๋ฅผ ์์ ์ปดํฌ๋ํธ์์ ๋ณํ์ํค๊ธฐ ์ํด์๋ props๋ก ๋ถ๋ชจ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ setState๋ฅผ props๋ก ์ ๋ฌํด ํด๊ฒฐํ ์ ์๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ํตํด ๊ฐ์ง๋ ์ฅ์ ์ ํ๋์ ๋ฐฉํฅ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์งํ๋๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์ดํด๊ฐ ์ฝ๊ณ ๋๋ฒ๊น
์ด ์ฌ์ด ์ฅ์ ์ ๊ฐ์ง๋ค. ๋จ์ ์ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ ์
๋ฐ์ดํธํ๋ ์ฝ๋๋ฅผ ํญ์ ์์ฑํด์ผํ๋ ๊ฒ์ผ๋ก <input value={name}/>์์ onChange ์ด๋ฒคํธ ํจ์๋ฅผ ํญ์ ์ ๋ฌํด์ค์ผํ๋ ์ด์ ๋ฅผ ์ ์ ์์๋ค.
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ผ๋ก ๋ฆฌ์กํธ๊ฐ ์ด๋ฃจ์ด์ ธ์๋ ๊ฒ์ ์ดํดํ๋ฉด์ ์ด๋ฌํ ๋ฐ์ดํฐ์ View๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊ฑด์ง์ ๋ํด ์ ๋ฆฌํ ๊ฒ์ด ๋ฐ๋ก ๋์์ธ ํจํด์ด๋ผ๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค. ์ต๊ทผ ๋ฉด์ ์์๋ ๋์์ธํจํด์ ๋ํด ๋ฌผ์ด๋ณด์์ง๋ง ์๋๊ฒ MVC๋ฐ์ ์์ด... ๊ทธ๊ฒ๋ฐ์ ์ค๋ช
ํ ์ ์์๋ค.
์๋ฐฉํฅ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ผ๋ก MVCํจํด์ ์ฌ์ฉํ๋ Facebook์ ์ ์ ๋ณต์กํด์ง๊ณ ์์ธกํ์ง ๋ชปํ๋ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋จ๋ฐฉํฅ ์ํคํ์ฒ์ธ Flux ํจํด์ ๋์ ํ๋ค.
Flux ํจํด
Flux ํจํด์ ์ฌ์ฉ์๊ฐ View์์ Action์ ๋ฐ์์ํค๋ฉด Dispatcher๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์๋ Store๋ก ์ ๋ฌ๋์ด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๊ณ , View๋ฅผ ์
๋ฐ์ดํธํ๊ฒ ๋๋ค. ์ด๋ฌํ Flux ํจํด์ ๋น์์๋ ๊ฐ๋
์ ์ธ ์ํคํ
์ฒ์์ง๋ง ๊ณง์ด์ด ์ด๊ฒ์ ๊ตฌํํ Redux๊ฐ ๋ฑ์ฅํ๊ฒ ๋๋ค.
Redux
Redux๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก Flux ํจํด์ Reducer๋ฅผ ๋ํด ๊ตฌํํ๋ค. Redux๋ Flux์ ๊ฐ์ด ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ์ ธ๊ฐ๋ฉฐ, ํ๋์ store์ ์ํ๋ฅผ ๋ณด๊ดํ๊ณ Reducer๋ฅผ ํตํด ์ ๋ฌ๋ฐ์ Action์ ๋ฐ๋ผ ์ด๋ป๊ฒ ์ํ๋ฅผ ์
๋ฐ์ดํธ ํ ์ง ์ฒ๋ฆฌํ๋ค. ๊ฐ๊ฐ์ ๋ํด์ ์ข ๋ ์์ธํ ์ ๋ฆฌํด๋ณด์.
- Action: ์ก์
์ ์ํ์ ์ด๋ค ๋ณํ๊ฐ ํ์ํ ๋ ๋ฐ์์ํค๋ ๊ฒ์ผ๋ก ์๋ฅผ ๋ค๋ฉด ๋ฒํผ ํด๋ฆญ ์ ์๋ก์ด Todo๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ Action์ ๋ง๋ค ์ ์๋ค. ์ฃผ๋ก Action์ ๋ง๋ค ๋ ๊ฐ์ฒด ๋ด type ์์ฑ์ด ๋ฐ๋ณต๋์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ก์
๊ฐ์ฒด๋ฅผ ๋ฐํํ๋
Action Creatorํจ์๋ฅผ ์ด์ฉํ๋ค.
export function addTodo(data) {
return {
type: "ADD_TODO",
data,
}
}-
Reducer: Reducer๋ Action๊ณผ ํ์ฌ ์ํ๋ฅผ ์ธ์๋ก ๋ฐ์ ์๋ก์ด ์ํ๋ก ๋ฐํํ๋ ์์ ํจ์๋ค. ์ง์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ useState์ ๊ฐ์ด ๋ถ๋ณ์ฑ์ ์ง์ผ ์์ ๋ ๋ณต์ฌ๋ณธ์ผ๋ก ์ํ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ค. ์ ์์ ์ "ADD_TODO" action์ด ์ ๋ฌ๋์๋ค๋ฉด Todo[]์ ์๋ก์ด Todo๋ฅผ ์ถ๊ฐํ๋ ๋ก์ง์ ์์ฑํ ์ ์๋ค. ์ด๋ ๊ฒ Reducer๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ์์ฒญ๋๊ฒ ๊ธธ์ด์ง ๊ฒ์ด ์์๋๋ค. sub-Reducer๋ฅผ ๋ง๋ค์ด ๊ฐ ๋๋ฉ์ธ๋ณ๋ก ๊ตฌ๋ถํด์ ์ฒ๋ฆฌ ๋ก์ง์ ์์ฑํ๊ณ Root-reducer๋ก ํฉ์ณ์ ๋ฐ์ํ๊ฒ ํ ์ ์๋ค.
function Todo(state, action) { switch (action.type) { case "ADD_TODO": return [...state, action.data] default: return state } } - Store: Store๋ ํ๋๋ง์ ๊ฐ์ง๊ณ Reducer๋ฅผ ์ ๋ฌํด reducer๋ก ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ๋ณด๊ดํ๋ ์ญํ ์ ํ๋ค.
Redux์๋ ์ค์ํ ์ธ๊ฐ์ง ์์น์ด ์๋๋ฐ, ๋จผ์ Store๋ ๋จ ํ๋์ฌ์ผํ๋ฉฐ, ๋ ๋ฒ์งธ๋ก ์ํ๋ ๋ถ๋ณ์ฑ์ ์ง์ผ์ผํ๋ค๋ ์ , ๋ง์ง๋ง์ผ๋ก Reducer๋ ์์ํจ์์ฌ์ผํ๋ค. ์ด์ค์์ ์์ํจ์๋ผ๋ ์ ์ ์ธ์๋ฅผ ์์ ํ๊ฑฐ๋, ์ธ๋ถ์ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ฐธ์กฐํ์ง ์์์ผํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๊ฒ์ ๋ถ๋ณ์ฑ์ ์ง์ผ์ผํ๋ ๊ฒ๊ณผ ๋์ผํ๊ฒ state ๋ณ๊ฒฝ ์ state์ ์ฐธ์กฐ๊ฐ๋ง ๋น๊ตํด์ ์ ๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์ ๋ฐํ๋ ์ํ ๊ฐ์ ์ง์ ๋ณ๊ฒฝํ์ง ์์์ผ ํ๋ค.
๐ ์ ๋ฆฌํ๋ฉฐ
๋ฆฌ์กํธ ๊ด๋ จ๋ ๋ฉด์ ์ง๋ฌธ๋ค์ ํ๋ฒ์ ์ ๋ฆฌํ๋ฉด์ ์ฌ์ ํ ๋ชจ๋ฅด๋ ์ ์ด ๋ง์ง๋ง ํญ์ ๊ธฐ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ ๋์๋ค๋ ๊ฒ์ ๋๋ ์ ์์๋ค. ๋ณด๋ค ๋ช ํํ๊ฒ ์ด์ผ๊ธฐํ ์ ์๊ฒ ๊ณ์ํด์ ์ ๋ฐ์ดํธํ๊ณ ๋ค์ ์์ฑํด๋๊ฐ ์์ ์ด๋ค.
[์ฐธ์กฐ]