코딩마을방범대

React의 useRef 와 JavaScript의 객체 구조 분해 할당 본문

👀 프론트엔드

React의 useRef 와 JavaScript의 객체 구조 분해 할당

신짱구 5세 2023. 7. 21. 16:42
728x90

 

 

 

React의 useRef

 

  • .current 프로퍼티로 전달된 인자(initialValue)로 초기화된 변경 가능한 ref 객체를 반환함
  • 저장공간 또는 DOM요소에 접근하기 위해 사용되는 React Hook
  • JavaScript의 querySelector 역할을 함
Ref
reference, 즉 참조

 

 


 

 

input 객체에 포커스를 거는 예제

 


  
import { useRef, useEffect } from "react";
import "./styles.css";
function App() {
const inputRef = useRef();
function focus() {
inputRef.current.focus();
}
return (
<div>
<input ref={inputRef} type="text" placeholder="아이디 또는 이메일" />
<button>Login</button>
<br />
<button onClick={focus}>focus</button>
</div>
);
}
export default App;

 

포커스 버튼을 클릭하면 focuse 함수가 실행되며,

useRef()를 이용해 ref가 inputRef인 input 태그에 포커스를 맞춰줌!

 

 

 

 


 

 

 

 

 

 

React의 useState와 useRef의 차이점

 

export JS

※ upVar() 함수가 실행되어도 다시 호출하면 varCount=0 으로 계속 초기화되기 때문에 실질적으로 값이 올라가지 않는다.

 

구분 설명
const [변수명, set변수명] = useState(기본값) getter와 setter을 세팅한 뒤 useState에 기본값을 설정해줄 수 있다.
set 할 경우 자동으로 렌더링이 된다
useRef(기본값) 값은 변하지만 렌더링은 되지 않는다

  
import { useState, useRef } from "react";
function App() {
const [stateCount, setStateCount] = useState(0);
const refCount = useRef(0);
let varCount = 0;
function upState() {
setStateCount(stateCount + 1);
}
function upRef() {
++refCount.current;
}
function upVar() {
++varCount;
}
return (
<div>
<div>stateCount : {stateCount} </div>
<div>refCount : {refCount.current} </div>
<div>varCount : {varCount} </div>
<br />
<button onClick={upState}>state up</button>
<button onClick={upRef}>ref up</button>
<button onClick={upVar}>var up</button>
</div>
);
}
export default App;

 

 


 

 

렌더링 js


  
import { StrictMode } from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
const rootElement = document.getElementById("root");
const root = createRoot(rootElement);
root.render(
<StrictMode>
<App />
</StrictMode>
);

 

 

 

 


 

 

 

 

객체 구조분해 할당

const {변수명} = 

변수를 {}에 담는 이유가 뭘까!?

 


  
const {ds} = useStores();
const {parentRef} = props;

위와 같은 코드를 확인하고 의문이 생겨 찾아봄!!

 

배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식이라고 한다.

 

 

아래에서 예를 들어 해석하자면,

 

오브젝트 구조


  
let object ={
a : "aaaa"
};
// const a = object.a;
const {a} = object;

 

arr(배열) 구조


  
var x = [1, 2, 3, 4, 5];
var [y, z] = x;
console.log(y); // 1
console.log(z); // 2

 

 

 


 

 

 

기출 변형!

 

선언에서 분리한 할당


  
var a, b;
[a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2

 

 

기본값

기본값 변수에 기본값을 할당하면, 분해한 값이 undefined일 때 그 값을 대신 사용합니다.


  
var a, b;
[a=5, b=7] = [1];
console.log(a); // 1
console.log(b); // 7

 

 

변수 값 교환하기


  
var a = 1;
var b = 3;
[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1

 

 

 

일부 반환 값 무시하기


  
function f() {
return [1, 2, 3];
}
var [a, , b] = f();
console.log(a); // 1
console.log(b); // 3

 

 

변수에 배열의 나머지를 할당하기


  
var [a, ...b] = [1, 2, 3];
console.log(a); // 1
console.log(b); // [2, 3]

 

 

선언 없는 할당


  
var a, b;
({a, b} = {a: 1, b: 2});

 

 

 

 


 

 

 

 

 

💡 TIPS!

 

setInterval와 setTimeout의 차이점

구분 설명
setTimeout() 어떤 코드를 바로 실행하지 않고 일정 시간 기다린 후 실행해야하는 경우 사용
setInterval() 웹페이지의 특정 부분을 주기적으로 업데이트해줘야 하거나,
어떤 API로 부터 변경된 데이터를 주기적으로 받아와야 하는 경우 사용

 

 


 

 

setTimeout


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

 

첫 번째 인자는 실행 시킬 함수를 받는다.

두 번째 인자는 지연 시간(ms)를 받는다.

세 번째 부터첫 번째 인자로 넘어온 함수가 인자를 받는 경우, 이 함수에 넘겨줄 값을 명시한다.

 

 

setTimeOut 함수는 타임아웃 아이디(Timeout ID)를 반환하는데, 이 타임아웃 아이디는 내부적으로 생성되는 타이머 객체를 가리키고 있다.

clearTimeout 함수에 타임아웃 아이디를 인수로 주어 타임아웃을 취소할 수 있다.

 


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

 

 

 


 

 

setInterval

어떤 코드를 일정한 시간 간격을 두고 반복해서 실행하고 싶을 때 사용

 


  
setInterval(() => console.log(Math.floor(Math.random() * 10)), 2000);
//3
//2
//8
//...

위 예제의 경우 2초마다 랜덤한 수를 출력한다.

 

 

setInterval 함수도 인터벌 아이디(Interval ID)를 반환하는데, 이 아이디 역시 내부적으로 생성되는 타이머 객체를 가리키고 있다.

clearInterval 함수에 인터벌 아이디를 인수로 주어 반복되는 함수를 취소할 수 있다.

 


  
const intervalId = setInterval(() => console.log(count++), 2000);
//1
//2
//3
clearInterval(intervalId);

 

 

 

 

 

 

 


참고사이트

const {} = props es6 문법 구조분해할당(Destructuring assignment)이란

web docs

[React] useRef란?

자바스크립트의 setTimeout()과 setInterval() 함수

 

 

728x90