ํ์ด ๋ฐ๋๊ณ ์ฒ์์ผ๋ก ๋ฉํ ๋ง์ ์งํํ๋ค. ๊ฐ์ ์๊ฐ๋ฅผ ํ๊ณ ์์ผ๋ก์ ๋ฐฉํฅ์ฑ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ๋๋์๋ค. ๋ํ react ํ์ต ์ง๋ฌธ 2๊ฐ์ง๋ฅผ ํด์ ์ค๋ช
์ ๋ค์ ์ ์์๋ค.
1. state๋ const๋ก ์ ์ธ์ด ๋๋๋ฐ ์ด๋ป๊ฒ setter๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ด ๋ฐ๋๋์ง?! ๋ด๋ถ ๋์ ์๋ฆฌ๊ฐ ๊ถ๊ธํ๋ค.(์ถํ ํฌ์คํ
์์ !)
but useState์ ๋ด๋ถ ์์ค์ฝ๋ ๊ตฌ์กฐ๊ฐ ๊ถ๊ธํด์ ๋ฏ์ด๋ณด๋ ์ค.. ์๋ง ํ๋ฌ์ ๋ ๊ฑธ๋ฆฌ๋ ์ฌ์ ์ผ ๊ฒ๊ฐ๋ค. ์๊ฐ์ ์ ๋ถ๋ฐฐํด์ ํํํ ๋ฏ์ด๋ณผ ์์ ! ์๋ฃ๊ฐ๋๋ค๋ฉด ํฌ์คํ ํ ์์ ์ด๋ค ใ ใ
์ค๋์ ๋ฉ์ด์ปค์ค๋๊ณผ์ ํน๊ฐ์ด ์์๋ ๋ ! ์ฝ 1์๊ฐ ๋ฐ ์ ๋ ์งํ์ ํ๊ณ , ๋ง์ ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์๊ฐ์ด์๋ค ใ ใ ํน๊ฐ์ ๋ฅ๊ธ๊ฒ ๋๋ฌ์์์ ์งํํ๋๋ฐ ํธ์ํ ๋ถ์๊ธฐ ์์์ ๋ง์ ์ง๋ฌธ์ ํ ์ ์์ด์ ์ข์๋ค.
React ๊ณต๋ถ๊ฐ ๋๋ฌด ํ๋ค์ด์
์ํํธ์จ์ด๋ฅผ ๊ณต๋ถํ ๋ ๊ฐ๋ ์ ๊ฐ๋ ์ ์ผ๋ก ๊ณต๋ถํ๊ณ ์ ํ๋ฉด ๋๋ฌด๋ ํ๋ค๋ค.
์ค์ ์ฌ์ฉํ๋ ๋งฅ๋ฝ์ ๋ง๋ค์ด์ผ ์ต๋์ด ํจ์ฌ ์์ํ๋ค.
๊ฐ๊ณ ์ถ์ง ์์ ํ์ฌ์ ํฉ๊ฒฉํ ๊ฒฝ์ฐ, ๊ฐ๋๊ฒ ๋์์ง, ๊ณต๋ถ๋ฅผ ๋ ํ๋๊ฒ ๋์์ง?
๋ด ์ฅ์ ์ ์ด๋ฆฌ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฆ์ํ ๊ฒ์ด๋ผ๊ณ ํจ. ๋ถํธ์บ ํ๊ฐ ์ง๊ธ๊น์ง๋ ๊ต์ฅํ ๋ง์๊ณ , ์์ผ๋ก๋ ๋ง์ด ์๊ธธํ ๋ฐ, ๊ธฐ์ ์ ์ธ ์ปค๋ฆฌํ๋ผ์ ๋น์ทํ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๊ด๋ฐ๋ ๋ฆฌ์กํธ๋ฅผ ํ์ตํ๋ค๋๊ฐ.. ๊ทธ๋์ ์ฃผ๋์ด์ ์ ์ฅ์์ ๊ธฐ์ ์ ์ญ๋์ ๋ค๋ค ํฌ๊ฒ ์ฐจ์ด๊ฐ ๋์ง ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋๋ฐ, ๊ทธ ์์์ ๋๋ง์ ์ฐจ๋ณ์ ์ ์ด๋ป๊ฒ ์ฐพ์ ์ ์์์ง ๊ถ๊ธํฉ๋๋ค.
์ฐจ๋ณ์ ์ ์ฐพ๋ ๋ฐฉ์
๊ฐ๋ ์ฑ ๋ณด๋ค๋ ํ๋ก๋ํธ๋ฅผ ๋ง๋ค์ด๋ผ~
์ฌ์ฉ์๊ฐ ๋ ํผ์์ธ ๊ฒ๋ ์ข๋ค. (๋ด๊ฐ ๋ถํธํ ๊ฒ ๋ง๋ค๋ฉด) ๋ ์์ฃผ ์ ์ฉํ ๊ฒฝํ์ ํ ์ ์์ ๊ฒ!
์น์ ๋ํ ์์ง๋์ด๋ง ์ ์ธ ์ญ๋์ด ๋ฐ์ด๋ ๊ฒฝ์ฐ - ๊ธฐ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์์ง๋์ด (๋ผ๊ฐ๋ฐ์)
์ต์ํ์ ๊ธฐ์ ๋ก ์ข์ ํ๋ก๋ํธ๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ - ํ๋ก๋ํธ ์ ์ธ ์ธก๋ฉด์์ ์ปค๋ฆฌ์ด๋ฅผ ์๊ธฐ
ํ์คํ - ์๋น์ค๊ฐ ๋์๋๊ธฐ ์ํ ์ธํ๋ผ, ๋ฐฑ์๋, ๊ธฐํ์ ๋ฑ์ ํ์ ์ ์ ํด๋๊ฐ๋ ๊ฒฝ์ฐ
โ ๋ฆด๋ฆฌ์ฆ ๋์ง ์๋ ํ๋ก๋ํธ๋ฅผ ๋ง๋ค์ด๋ณด์ง ์์ผ๋ฉด 3๊ฐ์ง ์์ญ ๋ค ๊ฒฝํํด๋ณด์ง ๋ชปํ๋ค.
๊ณต๋ถ๋ฅผ ํ ๋ ๋์์ ๋ฐ๋ ๊ฒ ์ข์์ง, ํผ์์ ๋๊น์ง ์ฐพ์๋ณด๋๊ฒ ์ข์์ง
๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ ์ด๋ป๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ๋๊ฐ๋๊ฐ? ์ํ์ค๋ฅผ ์ฐพ์๋ณด๊ธฐ
์ด๋ฐ ์ฌ๋์ด ์ ๋ฌธ์ฑ์ ๊ฐ์ง ์์ง๋์ด๊ฐ ๋๋๋ผ! ์ด๋ค ํน์ง์ด ์๋๊ฐ?
์ง์น์ง ์๊ณ ๊ณต๋ถํ๋ ๋ฐฉ๋ฒ?
๊ฐ์ดํ๋ฉด ์์ง์นจ
ํ๋ก์ ํธ ๋ฒ๊ทธ๊ฐ ๋๋ฌด ์ฌ์ํ ๊ฒ ๋ฐ์ ์๋์ค๋๋ฐ, ํ๋ก์ ํธ๋ฅผ ๊ด์ฒ ํ๋ ํน๋ณํ ๋ฌธ์ ํด๊ฒฐ์ ๊ฒฝํํ๊ธฐ ์ํด์๋ ์ด๋ค ์ค๋น๊ฐ ํ์ํ ์ง?
ํ๋ฌ ์ ์ ์ ์๋ ๊ธ์ ๋ค์ ๋ณด๋ฉด ์ธ์ฌ์ดํธ๋ฅผ ์ป์ ์ ์๋ค.
์ฝ์งํ๋ค๊ฐ โ๊ฒฐ๊ตญ ๋ด๊ฐ ํด๊ฒฐํ๋ ค๋ ๊ฒ์ ๋ญ์ง?โ๋ผ๋์ง๋ฌธ์ ๋ค์ ํ๊ธฐ!!!!
์์ด ..ใ ใ ใ ใ
Devfolio
์ฝ๋ฉํ ์คํธ ๋ฌธ์ ์ ํ๊ธฐ
const handleTitleChange = (e) => {
setTitle(e.target.value);
};
<input value={state} onChange={handleTitleChange}></input>
state๊ฐ input์ value์ ๋ฐ์๋๊ณ handleTitleChange
๋ผ๋ ํธ๋ค๋ฌ๋ onChange ์ด๋ฒคํธ๊ฐ ๋ฐ์๋ ๋๋ง๋ค ์คํ๋๋ฐ, ๊ทธ ๋ด๋ถ์์๋ setter
๋ฅผ ํธ์ถํ๋ค.
์ด๋ onChange prop์๋ html ์์์ oninput ์ด๋ฒคํธ์ ๊ฐ์๋ฐ, ์ ๋ ฅ๊ฐ์ด ๋ฐ๋๋ ๋ง๋ค ๋ฐ์ํ๋ ์ด๋ฒคํธ์ด๋ค. (html์ onchange์๋ ๋ค๋ฅด๋ค)
๋ฆฌ์กํธ์์ HTML๊ณผ ๋ค๋ฅด๊ฒ onChange
Prop์ ์ฌ์ฉํ๋ฉด ์
๋ ฅ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ํธ๋ค๋ฌ ํจ์๋ฅผ ์คํํ๋ค. oninput
์ด๋ฒคํธ์ ๊ฐ๋ค
<label />
ํ๊ทธ์์ ์ฌ์ฉํ๋ ์์ฑ์ธ for
๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ๋ณต๋ฌธ ํค์๋์ธ for
์ ๊ฒน์น๊ธฐ ๋๋ฌธ์ ๋ฆฌ์กํธ์์๋ htmlFor
๋ฅผ ์ฌ์ฉํ๋ค.
onSubmit
html์ form ํ๊ทธ์ ๊ธฐ๋ณธ ๋์์ submit ๋ฒํผ์ ๋๋ ์ ๋, ์ ๋ ฅ ํผ์ ๊ฐ๊ณผ ํจ๊ป GET request๋ฅผ ๋ณด๋ธ๋ค(๊ทธ๋ฆฌ๊ณ ์๋ก๊ณ ์นจ)
Controlled Component
** state๊ฐ input์ value์ ๋ฐ์๋๊ณ
โ ์ด๋ฌํ ๋ฐฉ์์ Controlled Component๋ผ๊ณ ํ๋ค
value
์์ฑ์ ๋ฆฌ์กํธ์์ ์ง์ ํ์ง ์๊ณ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ์
๋๋ค.file input์ ์ ์ด ์ปดํฌ๋ํธ๋ก ์ฌ์ฉํ๋ฉด error๊ฐ ์๊ธด๋ค!
file input์ value ์์ฑ์ ์ฌ์ฉ์๋ง ์ง์ ๋ฐ๊ฟ ์ ์๊ณ , javascript๋ ๋น๋ฌธ์์ด๋ก๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅ (์ฆ ์ด๊ธฐํ๋ ๊ฐ๋ฅ)
์ํ๋ ์์ ์ ์ค์ DOM๋ ธ๋์ ์ ๊ทผํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ ์ ์๋ prop
ref ๊ฐ์ฒด
const inputRef = useRef()
// ...
return <input type="file" onChange={handleChange} ref={inputRef} />;
console.log(inputRef)
๋ฅผ ํ๊ฒ๋๋ฉด current
ํ๋กํผํฐ๊ฐ ์๊ณ , FileInput์ ๊ฐ๋ฆฌํจ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.objectURL ๋ง๋ค๊ธฐ
URL.createObjectURL(file)
์ด๋ผ๋ ํจ์๋ก ์์ฑ ๊ฐ๋ฅ . ๋ฐํํ๋ ๋ฌธ์์ด๋ก ํด๋นํ์ผ์ ์ฃผ์์ฒ๋ผ ์ธ ์ ์์
๋คํธ์ํฌ ๋ฆฌํ์คํธ๋, ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ฐ์ด ์ปดํฌ๋ํธ ํจ์์์ ์ธ๋ถ์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ฌ์ด๋ ์ดํํธ๋ผ๊ณ ํ๋ค. ์ด๋ฅผ ์ ๋ฆฌํ๊ธฐ ์ํด useEffect๋ฅผ ํ์ฉํ๋ค.
set
ย functions, likeย setSomething(nextState)
useState
๊ฐ ๋ฐํํ๋ set ํจ์
๋ฅผ ์ฌ์ฉํ๋ฉด ์ํ๋ฅผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธํ๊ณ ๋ ๋๋ง์ ๋ค์ ํธ๋ฆฌ๊ฑฐํ ์ ์๋ค.
๋ค์ ์ํ๋ฅผ ์ง์ ์ ๋ฌํ๊ฑฐ๋ ์ด์ ์ํ์์ ๊ณ์ฐํ๋ ํจ์๋ฅผ ์ ๋ฌํ ์ ์๋ค:
const [name, setName] = useState('Edward');
function handleClick() {
setName('Taylor'); // ์ํ๋ฅผ ์ง์ ์ ๋ฌ
setAge(a => a + 1); // ์ด์ ์ํ์์ ๊ณ์ฐํ๋ ์ฝ๋ฐฑ ์ ๋ฌ
}
setter
์ ์ฆ, ํ๋ผ๋ฏธํฐ๋ก nextState(์ํ๊ฐ ๋๊ธธ ์ํ๋ ๊ฐ)์ ์ ๋ฌํ๋ฉด ๋๋ค.
๋ชจ๋ type์ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์์ง๋ง, ํจ์(=์ฝ๋ฐฑ)๊ฐ ๋ค์ด๊ฐ๋ฉด ํน๋ณํ ๋์์ ํ๋๋ฐ, ์ด๋ฅผ updater function์ด๋ผ ํ๋ค.
ํจ์๋ฅผ nextState๋ก ์ ๋ฌํ๋ฉด updater function๋ก ์ทจ๊ธ๋๋ค.
โ ๏ธ updater function ๊ท์น!
์ด ํจ์๋ ์์ํด์ผ ํ๊ณ , ๋ณด๋ฅ ์ค์ธ state๋ฅผ ์ ์ผํ argument๋ก ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๋ค์ ์ํ๋ฅผ ๋ฐํํด์ผ ํ๋ค.
React๋ updater function์ queue์๋ฃ๊ณ ์ปดํฌ๋ํธ๋ฅผ re-renderingํ๋ค. ๋ค์ ๋ ๋๋ง ์ค์ React๋ queue์ ์๋ ๋ชจ๋ updater ๋ฅผ ์ด์ state์ ์ ์ฉํ์ฌ ๋ค์ state๋ฅผ ๊ณ์ฐํ๋ค.
โ React๋ state update๋ฅผ ์ผ๊ด ์ฒ๋ฆฌ(batch)ํ๋ค. โก๋ชจ๋ event handler๊ฐ ์คํ๋ ๋ค, set function์ ํธ์ถํ ํ์ ํ๋ฉด์ updateํ๋ค. โข์ด๋ฌ๋ฉด single event ์ค์ ์ฌ๋ฌ๋ฒ rerendering์ด ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
class Example extends React.Component {
state = { count: 0 }
handleClick = () => {
this.setState({ count: this.state.count + 1 })
this.setState({ count: this.state.count + 1 })
console.log(this.state.count)
}
render() {
console.log('render called')
return (
<button onClick={this.handleClick}>
Click me ({this.state.count})
</button>
)
}
}
๋ฒํผ์ ํด๋ฆญํ๋ฉด handleClick()
๋ ๋ค๋ฅธ count ๊ฐ์ผ๋ก setState๋ฅผ ๋ ๋ฒ ํ๋ค. ํ์ง๋ง React๋ ์ด ๋ ํธ์ถ์ โ batchํด ํ ๋ฒ์ ์
๋ฐ์ดํธ์ ๋ชจ๋ ์ ์ฉํ๋ฏ๋ก ์ปดํฌ๋ํธ๋ ํ ๋ฒ๋ง ๋ค์ ๋ ๋๋งํ๊ณ ์นด์ดํธ ๊ฐ์ 2๊ฐ ๋ฉ๋๋ค. โก์ด๋ console.log
๋ก ์ถ๋ ฅ๋๋ ๊ฐ์ 1์ด๋ค. ๊ทธ ์ด์ ๋, state update๊ฐ event handler๊ฐ ๋ชจ๋ ์คํ ๋ ํ set function์ ํธ์ถํ๊ธฐ ๋๋ฌธ์ด๋ค.
import { useState, useEffect } from "react";
export default function App() {
const [count, setCount] = useState(0);
const handleOneCount = () => {
setCount(1);
};
const handleZeroCount = () => {
setCount(0);
};
console.log(count);
return (
<div className="App">
<h2>{count}</h2>
<button onClick={handleOneCount}>1๋ก ๋ง๋ค๊ธฐ</button>
<button onClick={handleZeroCount}>0์ผ๋ก ๋ง๋ค๊ธฐ</button>
</div>
);
์ด ์ฝ๋๋ฅผ ์คํํ์ ๋, 1๋ก ๋ง๋ค๊ธฐ
๋ฒํผ์ด๋ 0์ผ๋ก ๋ง๋ค๊ธฐ
๋ฒํผ์ ์ฐ์์ผ๋ก ํด๋ฆญํ๋ฉด console.log(count)๊ฐ 2๋ฒ ๋ฐ์ํ๊ณ , 3๋ฒ์งธ ๋ถํฐ๋ ์ถ๋ ฅ์ด ์๋๋ ์ด์๊ฐ ๋ฐ์ํ๋ค.
์ฆ, ์ฒ์ ๊ฐ์ 0์ผ๋ก ํด๋๊ณ , ์ต์ด ๋ ๋๋ง๋๋ ๋น์ฐํ 0์ด ์ฝ์์ด ์ฐํ๋ค. ๊ทธ ํ, 0์ผ๋ก ๋ง๋ค๊ธฐ
๋ฅผ ๋๋ฅด๋ฉด state๊ฐ ๋ณํ์ง ์์์ ์ฝ์์ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์๋ค.
๋ค์์ผ๋ก 1๋ก ๋ง๋ค๊ธฐ
๋ฒํผ์ ํ๋ฒ ๋๋ฅด๋ฉด state๊ฐ ๋ณํ๊ณ ๋ ๋๋ง์ด ๋ฐ์ํ๋ค. ์ด๋ console๋ ์คํ์ด ๋์ด์ 1์ด ์ถ๋ ฅ๋๋ค. โ ๋ฌธ์ ๋ ์ด๊ณณ!
ํ๋ฒ ๋ 1๋ก ๋ง๋ค๊ธฐ
๋ฅผ ๋๋ ์ ๋, state๊ฐ ๋ณํ์ง ์์๋๋ฐ ๋ 1์ด ์ถ๋ ฅ๋๋ค. ๊ทธ๋ฐ๋ฐ, ๋ ํ๋ฒ 1๋ก ๋ง๋ค๊ธฐ
์ ๋๋ฅด๋ฉด(์ฆ 2๋ฒ ์ด์ ๋๋ฅด๋ฉด) ์ฝ์์ด ์คํ๋์ง ์๋๋ค.(์ฆ ์ถ๋ ฅ์ด ์๋ค)
์ด์ ๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ง์ ๊ตฌ๊ธ๋ง์ ํ๊ณ , "React console twice"์ ๊ฐ์ ํค์๋๋ก ์ฐพ์๋ณด์๋๋ฐ ๋ง์ ์ฌ๋๋ค์ด ์ถ์ธกํ ๊ฒ์
<strict mode ๊ฐ ์์ธ์ด๋ค> ์๋ค.
โ strict ๋ชจ๋๋ ์์ ๋ ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ฐฉ์งํ๋๋ฐ ๋งค์ฐ ๋์์ด ๋๋ค
<React.StrictMode>
<App />
</React.StrictMode>
์ด ๋ถ๋ถ์ wrapping์ ์ฃผ์์ฒ๋ฆฌํ๋ฉด strict mode๊ฐ ์๋๊ฒ ๋์ด์ ๋ค์ 1๋ฒ๋ง ์ถ๋ ฅ๋๋ค.
์ง์ ์คํ๊ฒฐ๊ณผ, ์ด๊ฑด ์์ ํด๋ฆญ 1๋ฒ์ 2๋ฒ ์ถ๋ ฅ์ด ๋๋ ๊ฒ. ๋ค๋ฅธ ๊ฒฝ์ฐ์ด๋ค.
์ด ๊ฐ์ค์ ์ฆ๋ช ํ๋ฉด์ ์ด๋ฐ์ ๋ฐ ์๋ฃ๋ฅผ ์ต๋ํ ๊ฒฐ๊ณผ, rendering๊ณผ running์ด ๋ค๋ฆ์ ๊ผญ ์ธ์งํด์ผํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
๋์ ์๋ฌธ์ "ํด๋ฆญ์ 1ํํ๊ณ , ๋ 1ํํ์ ๋ state๊ฐ ๋ฐ๋์ง ์์ผ๋ฉด ๋ ๋๋ง์ด ์ผ์ด๋์ง ์์์ 2๋ฒ์งธ๋๋ ์ฝ์์ด ์ฐํ๋ฉด ์๋๋ ๊ฒ ์๋๊ฐ?!" ์๋๋ฐ, ์ด ๋ช ์ ์์ฒด๊ฐ ์๋ชป๋ ๊ฒ์ด์๋ค.
funtional component ์์ ๋ฆฌํด์ ์ console.log()๋ฅผ ๋ฃ์ผ๋ฉด ๋ฆฌ๋ ๋๋ง ์์ ์ฝ์์ด ์ฐํ๋ค๋ ๋ง๋ ๋ง์ด์ง๋ง, ์ฝ์๋ก๊ทธ๊ฐ ์ฐํ๋ฉด component ๊ฐ ๋ฆฌ๋ ๋๋ง์ด ๋๊ฒ์ ์๋๋ผ๋ ๋ง์ด๋ค. ์ฆ, ์ปดํฌ๋ํธ๊ฐ running๋๋ฉด console.log()๋ ์ฐํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ปดํฌ๋ํธ running ๊ณผ rendering์ ์ฐจ์ด๋?
๊ทธ๋ฌ๋ฉด running์ ์ธ์ ๋ฐ์ํ๋๋ฐ?
์ฌ๊ธฐ์ ๋งํ๋ค.. ์ 2๋ฒ์งธ ํด๋ฆญ๋๋ state๊ฐ ์๋ณํ์ผ๋ฉด์ ์ฝ์์ด ์ฐํ๋ฉด์, 3๋ฒ์งธ ์ด์ ํด๋ฆญ์ ์ฝ์์ด ์์ฐํ๊น.. ๋ ์ฐพ์๋ณด๊ณ ์๊ฒ๋๋ฉด ํฌ์คํ
ํ๊ฒ ๋ค.
์์ค ์ฝ๋ ๋ถ์์ ์์ง ing ์ค์ด๋ค.
์๋กญ๊ฒ ์๊ฒ๋ ์ ์
๋ฆฌ์กํธ ํจํค์ง์๋ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ๋ง ํฌํจ๋์ด ์๋ฐ๋ ์ ! ์ผ๋ฐ์ ์ผ๋ก ์น์ฉ react-dom ๋๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์ฉ react-native์ ๊ฐ์ React ๋ ๋๋ฌ์ ํจ๊ป ์ฌ์ฉ๋๋ค๊ณ readme์ ๋์์๋ค.
๋ฐ๋ผ์ useState๊ฐ ์ ์๋ ์์ค์ฝ๋๋ฅผ ํ๊ณ ํ๊ณ ํ๊ณ ..
๋ง์ง๋ง ๋์ฐฉ์ง๊ฐ ReactCurrentDispatcher.js
์ธ๋ฐ, ๊ฐ์ฒด ํ๋๋ฅผ ๋ฐํํ๋ ๊ฒ์ผ๋ก ๋์ด ๋ฌ๋ค.
์ฆ, ์ฌ๊ธฐ๊น์ง๋ ๋ณ ๋ด์ฉ ์์ดdispatcher๋ผ๋ ๊ฒ์์ ๋ฐ์์จ Hooks๋ฅผ ์คํํ๋ค. ๊ทธ ๊ณผ์ ์์ ํด๋น ํธ์ถ์ด ์ ํจํ์ง ๊ฒ์ฆํ๋ ์ ๋์ type ์ถ๋ก ์ ์ํ type ์ฃผ์ ์ ๋ ๋ก์ง์ด ์๋ค!
๋ฐ๋ผ์ ํ ๋ด๋ถ ๋์์ ์๊ธฐ ์ํด์๋ Reconciler๋ฅผ ๋ฏ์ด๋ด์ผ ํจ์ ๊นจ๋ฌ์ ํ๋ฃจ์๋ค!
์ฐธ๊ณ ๋ก ์ด ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด์ ๋ถ์ ์ค์ด๋ค. but React 16๋ฒ์ ๊ธฐ์ค์ด๋ผ 18๋ฒ์ ์ธ ํ์ฌ์๋ ์ด์ง์ ์ฐจ์ด๊ฐ ์๋ค.(๋ฌผ๋ก useState ๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ผ๋ก ๋ค๋ฅธ ์ ์ ์์ง๋ง, ์ถ์ํ๊ฐ ๋ ๋ง์ด ์งํ๋์ด์๋ค. ๊ทธ๋์ ๋ ๋ถ์ํ๊ธฐ ๊น๋ค๋ก์ ..ใ )