useRef
useRef๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ ์ฐธ์กฐํ๊ฑฐ๋ DOM์ ์ ๊ทผํ์ฌ ํ๊ทธ๋ฅผ ์กฐ์ํ ์ ์์ต๋๋ค.
const ref = useRef(์ด๊ธฐ๊ฐ);
๊ฐ์ ์ฐธ์กฐํ๋ Ref
ref๋ state๊ฐ ์๋๋ผ ์ผ๋ฐ JS๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ์์ ์ ์ธ์ํ์ง ๋ชปํฉ๋๋ค.
๋ฐ๋ผ์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ๊ฒ์ ๊ด์ฌํ๊ธฐ๋ณด๋ค๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋๋ฐ ์ ํฉํ๋ฉฐ, ๋ฆฌ๋ ๋๋ง ์ฌ์ด์ ๊ฐ์ ์ ์ฅํด ๋์ ์ ์์ต๋๋ค.
์ง์ญ ๋ณ์์๋ ๋ค๋ฅด๊ฒ ๋ฆฌ๋ ๋๋ง ๋ ๋ ๊ฐ์ด ์ด๊ธฐํ๋๊ฑฐ๋ ๋ณํ์ง ์๊ณ , ์ง์ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํฉ๋๋ค.
ref๋ฅผ ํตํด ์ ๊ทผํ ๋๋ ref.current๋ฅผ ์ฌ์ฉํ๋ฉด๋๊ณ , ๋ชจ๋ ํ์ ์ ๊ฐ์ด ๋ ์ ์์ต๋๋ค.. (boolean, string, number ๋ฑ..)
์
alert์ผ๋ก ๋จ๋ ref.current๋ ์นด์ดํธ๊ฐ ์ฆ๊ฐํ๋ ๊ฑธ ํ์ธํ ์ ์์ผ๋,
spanํ๊ทธ์ ์๋ ref.current๋ ๊ฐ์ด 0์ผ๋ก ๋ณํ์ง ์๋ ๋ชจ์ต์ ํ์ธํ ์ ์์ต๋๋ค.
(state๊ฐ ๋ฐ๋ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ด ๋ฆฌ๋ ๋๋ง ๋์ง ์์)
function handleStartClick() {
const intervalId = setInterval(() => {
// ...
}, 1000);
intervalRef.current = intervalId;
}
function handleStopClick() {
const intervalId = intervalRef.current;
clearInterval(intervalId);
}
์์ ๊ฐ์ด ๋ค๋ฅธ ํจ์์์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
DOM์ ์กฐ์ํ๋ ref
์ผ๋ฐ์ ์ผ๋ก DOM์ ์กฐ์ํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค. (style, focus, video๊ฐ์ฒด ๋ฑ)
์
inputํ๊ทธ ์์ฑ์ ref๋ฅผ ๋ฃ์ด์ฃผ์ด DOM์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค..
button์ ํด๋ฆญํ์ฌ onClick์ ์คํํด ์ฃผ๋ฉด inputํ๊ทธ์ focus๊ฐ ์กํ๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
ref๋ฅผ ์ ๊ฑฐํ๋ ค๋ฉด null๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
ulํ๊ทธ์ ref๋ฅผ ์ค์ ํด ์ฃผ๊ณ , querySelectorAll๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ๊ทธ์ ์ ๊ทผํ์ฌ ์คํฌ๋กค์ ์ด๋ํ ์ ์์ต๋๋ค.
Tip
์ฌ์์ฑ ๋ฐฉ์ง
function Video() {
const playerRef = useRef(new VideoPlayer());
// ...
new VideoPlayer๊ฐ ์ด๊ธฐ ๋ ๋๋ง์๋ง ์ฌ์ฉ๋์ง๋ง, ๋ ๋๋ง ๋ ๋๋ง๋ค ๊ณ์ ํธ์ถํ๊ฒ ๋จ์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋นํ๊ฒ ๋ฉ๋๋ค.
function Video() {
const playerRef = useRef(null);
if (playerRef.current === null) {
playerRef.current = new VideoPlayer();
}
// ...
์ด๊ธฐ๊ฐ์ null๋ก ์ฃผ๊ณ , ref.current์ new Videoplayer๋ฅผ ๋์ ํด ์ค์ผ๋ก์จ ๊ฐ์ ๋ ์ ์์ต๋๋ค.
Props๋ก ref ์ ๋ฌํ๊ธฐ
์์ ์ปดํฌ๋ํธ์ ํจ์๋ฅผ ์ ์ํ ๋, forwardRef๋ก ๊ฐ์ธ์ ์ฌ์ฉํ๋ฉด ref๋ฅผ props๋ก ๋ฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
import { forwardRef } from 'react';
const MyInput = forwardRef((ref) => {
return (
<input ref={ref}/>
);
});
export default MyInput;
const inputRef = useRef(null);
return <MyInput ref={inputRef} />;
Flag๋ณ์์ฒ๋ผ ์ฌ์ฉํ ์ ๋ ์๊ณ , ์กฐ๊ฑด์ ๋ฐ๋ผ style์ ๋ณ๊ฒฝํ ์ ๋ ์๊ณ , ๋ค์ํ๊ฒ ํ์ฉํ ์ ์๋ hook์ ๋๋ค.
'Front-End > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React] Hook : useCallback (0) | 2023.06.22 |
---|---|
React] Hook : useMemo (0) | 2023.06.20 |
React] Strict Mode (0) | 2023.06.20 |
React] Mount & Rerender (LifeSycle) (0) | 2023.06.20 |
React] Hook : useEffect (0) | 2023.06.20 |