반응형
useEffect
페이지가 렌더링 될 때마다 불리는 함수
useRef와 일반 변수의 차이
1
2
|
const countRef = useRef(0)
let countVar = 0;
|
cs |
countRef+1 할 경우 페이지가 unmount 되기 전까지 증가된 값이 남아있다.
countVar+1 할 경우 페이지가 재 렌더링 될 경우 값이 초기화된다.
useRef 잘못된 사용법
1
2
3
4
5
6
7
|
const App = () => {
const [renderCnt, setRenderCnt] = useState(0);
useEffect(() => {
setRenderCnt(renderCnt+1);
});
}
|
cs |
이렇게 사용할 경우 페이지가 렌더링 되면 renderCnt를 1 증가시키고 페이지가 다시 렌더링된다. 그러면 페이지가 렌더링 됐으니 다시 useEffect 함수를 타고 다시 renderCnt를 1 증가시킨다. 이렇게 계속 무한 루프에 빠지게 된다.
useRef 올바른 사용법
1 2 3 4 5 6 7 8 | const App = () => { const renderCnt = useRef(0); useEffect(() => { renderCnt.current = renderCnt.current+1; }); } | cs |
ref 는 리렌더링을 발생시키지 않는다. 렌더링이 처음 될 경우 rederCnt의 값은 변화시키지만 리렌더링을 발생시키지 않으므로 값만 변화하고 렌더링 무한루프에 빠지지 않는다.
반응형
'Front-end > Web' 카테고리의 다른 글
Github page deploy Error 모음 (0) | 2022.05.18 |
---|---|
[Apache] OPTIONS, HEAD 등 불필요 Method 막기 (0) | 2021.10.21 |
SOP란? (0) | 2021.01.21 |
브라우저 동작 원리(2) 렌더링 엔진 - 웹킷(Webkit), 블링크(Blink), Reflow, Repaint (0) | 2019.03.25 |
브라우저 동작 원리(1) 자바스크립트 엔진, V8 엔진이란 (0) | 2019.03.22 |