useEffect, useRef이 헷갈려서 이번 기회에 공부하려고 한다.
useRef은 추후 다시 정리해서 업로드하려고 한다.
부수효과(Side Effect)?
- 컴포넌트 외부의 환경에 영향을 주는 작업
- 컴포넌트 내에서 fetch를 사용해 API 정보를 가져오거나 이벤트를 활용해 DOM을 직접 조작할 때 발생(API 요청, DOM 조작, 타이머 설정 등이 Side Effect)
let a = "hello"; function b(){ a = "world"; } b(); // b는 Side Effect를 발생시킨다.
React 컴포넌트에서 Side Effect
- 타이머 사용 (setTimeout)
- 데이터 가져오기 (fetch API, local storage)
useEffect(함수, [종속성1, 종속성2, ...])
//1. 빈 배열
useEffect(함수, [])
//2. 아무것도 넣지 않기(기본형태)
useEffect(함수)
// useEffect 불러오기
import React, { useEffect } from 'react';
export default function App() {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("count");
}, [count]);
const handleCounterClick = () => {
setCount(count + 1);
};
return (
<div className="App">
<button onClick={handleCounterClick}>카운터 값: {count}</button>
</div>
);
}
그래서 콘솔창을 확인해 보면 버튼은 7이라 찍혀 있지만 콘솔창은 첫 렌더링 까지 카운트되서 8이 찍혀 있는 걸 확인 할 수 있다.
Mounting, Unmounting?
React 컴포넌트의 생명주기(Life Cycle) 중 두 단계를 나타낸다.
useEffect 라는 Hook 을 사용해 컴포넌트가
- Mounting: 화면에 처음 나타날 때
- Unmounting : 화면에 사라질 때
주로 사용 되는 예시
- focus
- text selection
- media playback
- 애니메이션 적용
- d3.js, greensock 등 DOM 기반 라이브러리 활용
const 주소값담는그릇 = useRef(참조자료형)
return (
<div>
<input ref={주소값담는그릇} type="text" />
</div>);
useRef
로 DOM노드, 엘리먼트, React 컴포넌틑 주소값을 참조할 수 있다.React의 특징이자 장점인 선언형 프로그래밍 원칙과 배치되기 때문에, 조심해서 사용해야 한다.
Reat hook 중 useState, useEffect, useRef을 주로 사용하는 거 같은데
그 중 useEffect, useRef을 자주 사용하지 않아 기능이 헷갈렸던 거 같다.
이번 기회에 어느 정도 알 수 있는 기회가 되었다.
useRef는 알 것 같지만 시간이 부족해 이후 좀 더 찾아보고 정리할 예정이다.
🔗 출처
https://react.vlpt.us/basic/16-useEffect.html
chat GTP
https://yoonjong-park.tistory.com/entry/React-useRef-%EB%8A%94-%EC%96%B8%EC%A0%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80