๐คต State์ Ref์ ์ฐจ์ด๊ฐ ๋ฌด์์ธ๊ฐ์?
๐ ???
๐คต ์ด๋ฐ ์ํฉ์์ ref์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค๋ฉด ๋ค์ ๋ ๋๋ง์ด ๋ ๊น์?
function MyComponent() {
const ref = useRef(3)
return <div>{ref.current}</div>
}
Props๋ Properties์ ์ค์์ด๋ค. ์ปดํฌ๋ํธ์ ์ต์ ์ด๋ ์ค์ ๊ณผ ๊ฐ์ ๊ฐ์ผ๋ก, ์์ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋๋ฉฐ ๋ถ๋ณํ๋ ๊ฐ์ด๋ค. ๋ฐ๋ผ์ ์ปดํฌ๋ํธ๋ props ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ ์์ ์ปดํฌ๋ํธ์๊ฒ props ๊ฐ์ ์ ๋ฌํ ์๋ ์๋ค.
State๋ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ๋ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง๊ณ ์์ฑ๋๊ณ , ๋ณ๊ฒฝ๋ ์ ์๋ ๊ฐ์ด๋ค. ๋ณดํต ์ ์ ์ด๋ฒคํธ๋ฅผ ํตํด์ ๋ณ๊ฒฝ๋๋ค. ์ปดํฌ๋ํธ๋ ์์ ์ state๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค. state๋ privateํ ๊ฐ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ปดํฌ๋ํธ๊ฐ state๋ฅผ ๊ผญ ๊ฐ์ ธ์ผ ํ ํ์๋ ์๋ค. state๋ ๋ณต์ก์ฑ์ ๋์ด๊ณ ์์ธก๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ๋ฏ๋ก state๋ฅผ ๋๋ฌด ๋ง์ด ์ฐ์ง ์์ ๊ฒ์ ๊ถ์ฅํ๊ธฐ๋ ํ๋ค.
setState()
๋ฅผ ์ฌ์ฉํด์ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ ๋๋งํจsetState()
๋ ๋น๋๊ธฐ์ ์ผ ์๋ ์์. ์ด๋ค ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ setState()
๋ฅผ ํธ์ถํ๋ค๊ณ ํด๋, ๊ทธ ๋ณ๊ฒฝ์ ์ฆ์ ์ผ์ด๋์ง ์์ ์ ์๊ณ , ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์์ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ setState()
๋ฅผ ํธ์ถํ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ๋ถํ์ํ ๋ ๋๋ง์ ํ์ง ์๊ธฐ ์ํด์์.render ๋ฉ์๋๋ฅผ ํตํด ์์ฑ๋ DOM ๋ ธ๋ ํน์ React ์๋ฆฌ๋จผํธ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
ํด๋์ค ์ปดํฌ๋ํธ ๊ธฐ์ค์ผ๋ก,
this.myRef = React.createRef()
<div ref={this.myRef} />
const node = this.myRef.current
์๋ฆฌ๋จผํธ์ ref๋ฅผ ์ ๋ฌํ๋ฉด, ๋
ธ๋๋ฅผ ํฅํ ์ฐธ์กฐ๋ ref.current
์ ๋ด๊ธด๋ค.
ํจ์ ์ปดํฌ๋ํธ์์๋ useRef()
hook API๋ก ref์ ์ฌ์ฉํ ์ ์๋ค.
const ref = useRef(null)
<input ref={ref} type="text" />
ref.current.focus();
useRef()
์์ ๋ง๋ค์ด์ง๋ ref ๊ฐ์ฒด๋ DOM ref๋ง์ ์ํ ๊ฒ์ด ์๋๋ค. ref ๊ฐ์ฒด๋ ๋ณ๊ฒฝํ ์ ์๊ณ ์ด๋ค ๊ฐ์ด๋ ๋ณด์ ํ ์ ์๋ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ์ผ๋ฐ ์ปจํ
์ด๋์ด๋ค. class์ ์ธ์คํด์ค ํ๋กํผํฐ์ ์ ์ฌํ๋ค. ๊ทธ๋์ setInterval
๊ฐ์ ์ธํฐ๋ฒ์ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค.
const intervalRef = useRef();
useEffect(() => {
const id = setInterval(() => {
// ...
});
intervalRef.current = id;
return () => {
clearInterval(intervalRef.current);
};
});
useRef()
๋ก ๋ง๋ค์ด์ง๋ ref ๊ฐ์ฒด๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ด๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ ๊ฐ์ฒด์ ๋ค๋ฅธ ์ ์, ref ๊ฐ์ฒด๋ ๋ ๋๋ง์ด ๋์ด๋ ํญ์ ๋์ผํ ref ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
useRef()
์ ๊ทธ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ๋ ๋ณ๊ฒฝ๋ ์ฌ์ค์ ์๋ฆฌ์ง ์๋๋ค. ์ฆ, ref.current
ํ๋กํผํฐ๊ฐ ๋ณ๊ฒฝ๋์๋ค๊ณ ํด์ ๋ฆฌ๋ ๋๋ง์ด ์ผ์ด๋์ง ์๋๋ค. ๊ทธ๋์ ์ง๋ฌธ์ ์ํฉ์์๋ ๋ ๋๋ง์ด ๋ค์ ์ผ์ด๋์ง ์๋๋ค๋ ๊ฒ์ด ์ ๋ต์ด๋ค.
๋ฒํผ ํด๋ฆญ์ ํด๋ ๋ฆฌ๋ ๋๋ง์ด ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ซ์๊ฐ ๋์ด๋์ง ์์ง๋ง, ์ฝ์์๋ ๋ณ๊ฒฝ๋ ref.current
๊ฐ์ด ๊ณ์ ์ถ๋ ฅ๋๊ณ ์๋ค.