setTimeout(),setInterval() & React useRef

Yiseul·2022년 1월 5일
0

조각지식

목록 보기
6/20

자바스크립트의 타이머를 사용하는 함수

setTimeout()
일정 시간 기다린 후 실행해야하는 경우, 첫번째 인자로 실행할 코드를 담고 있는 함수를 받고, 두번째 인자로 지연 시간을 밀리초(ms) 단위로 받습니다. 세번째 인자부터는 가변 인자

setTimeout(() => console.log("2초 후에 실행됨"), 2000);

// 7
function add(x, y) {
  console.log(x + y);
}
setTimeout(add, 2000, 3, 4);

setTimeout()
타임아웃 아이디(Timeout ID)라고 불리는 숫자를 반환
타임아웃 아이디는 setTimeout() 함수를 호출할 때 마다 내부적으로 생성되는 타이머 객체를 가리키고 있습니다. 이 값을 인자로 clearTimeout() 함수를 호출하면 기다렸다가 실행될 코드를 취소할 수 있습니다.

const timeoutId = setTimeout(() => console.log("5초 후에 실행됨"), 5000);
clearTimeout(timeoutId);

setTimeout() 함수와 setInterval() 함수를 사용한 후에는 반드시 clearTimeout() 함수와 clearInterval() 함수를 사용해서 타이머를 청소해주는 습관을 들이시라고 말씀드리고 싶습니다.
특히, SPA(Single Page Application)을 개발할 때는 이 부분이 메모리 누수로 이어질 수 있기 때문에 각별히 주의가 필요합니다.


React Hooks: useRef 사용법

  • 상태 변경 -> 컴포넌트 재 랜더링

React 컴포넌트는 기본적으로 내부 상태(state)가 변할 때 마다 다시 랜더링(rendering)이 됩니다.

컴포넌트 함수가 다시 호출이 된다는 것은 함수 내부의 변수들이 모두 다시 초기화가 되고 함수의 모든 로직이 다시 실행된다는 것을 의미합니다.

다시 랜더링 되어도 동일한 참조값을 유지하려면?

우리는 대부분의 경우, 위와 같이 상태가 변할 때 마다 React 컴포넌트 함수가 호출되어 화면이 갱신되기를 바랍니다. 하지만 그에 따른 부작용으로 함수 내부의 변수들이 기존에 저장하고 있는 값들을 잃어버리고 초기화되는데요. 간혹 다시 랜더링이 되더라도 기존에 참조하고 있던 컴포넌트 함수 내의 값이 그대로 보존되야 하는 경우가 있습니다.

useRef 함수는 current 속성을 가지고 있는 객체를 반환하는데, 인자로 넘어온 초기값을 current 속성에 할당합니다. 이 current 속성은 값을 변경해도 상태를 변경할 때 처럼 React 컴포넌트가 다시 랜더링되지 않습니다. React 컴포넌트가 다시 랜더링될 때도 마찬가지로 이 current 속성의 값이 유실되지 않습니다.

useRef 훅 함수를 사용하는 또 다른 경우가 있는데, DOM 노드나 React 엘리먼트에 직접 접근하기 위해서 입니다.

  • 바닐라 자바스크립트에서 DOM 요소를 조작하기 위해 querySelector나 getElementById 등을 사용했다면, 리액트에서는 useRef 훅 함수를 사용합니다.
  • useRef는 .current 프로퍼티에 변경가능한 값을 담고있는 객체입니다
  • .current프로퍼티를 변경하더라도 리렌더링을 유발하지 않습니다. ref 객체 안의 값은 리액트 생명주기에 독립적이기 때문입니다


🙇

다음의 블로그 본문내용 갈췌하였습니다. https://www.daleseo.com/
profile
즐거운 도전중입니다:)

0개의 댓글