컴포넌트에서 데이터를 관리(State)하고 데이터가 변경될 때 상호작용(Effect)을 하기 위해 사용한다.
const App = () => {
const [state, setState] = useState(초기값);
....
}
const App = () => {
useEffect(EffectCallback, [Deps])
...
}
Deps
: 변경을 감지할 변수들의 집합(배열)useEffcet에 대해서 설명해줘
useEffect는 React의 Hook 함수 중 하나로, 함수형 컴포넌트에서 컴포넌트의 상태나 프로퍼티 등이 변경될 때 특정 동작을 실행할 수 있도록 해줍니다.
useEffect 함수는 첫 번째 매개변수로 함수를 받고, 이 함수는 컴포넌트가 렌더링되고 난 후 실행됩니다.
두 번째 매개변수로는 의존성 배열(deps array)을 받는데, 이 배열에 포함된 값들이 변경될 때마다 useEffect 함수가 실행됩니다.
useEffect 함수가 실행되면, 이전 렌더링과 현재 렌더링 간의 차이점이 발생한 부분에 대해 작업을 수행할 수 있습니다.
예를 들어, useEffect 함수를 사용하여 API 호출을 수행하거나, 브라우저의 localStorage에 값을 저장하거나, 혹은 다른 자바스크립트 라이브러리와의 연동 등 다양한 작업을 수행할 수 있습니다.
useEffect 함수를 사용할 때 주의해야 할 점은, 무한루프를 방지하기 위해 의존성 배열에 올바른 값을 넣어야 한다는 것입니다. 만약 의존성 배열이 빈 배열([])이면, useEffect 함수는 컴포넌트가 처음 마운트될 때 한 번만 실행됩니다.
만약 의존성 배열이 null이나 undefined인 경우에는, 컴포넌트가 렌더링될 때마다 useEffect 함수가 실행됩니다.
import {useMemo} from 'react';
일단 import 필수
지정한 state나 props가 변경될 경우 해당 값을 활용해 메모이제이션하여 재렌더링 시 불필요한 연산 줄이기
메모이제이션
: 컴퓨터 프로그래밍이 동일한 계싼을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 반복 수행을 제거 → 프로그램의 실행 속도를 빠르게 해주는 기술
. 동적 계획법
의 핵심이 되는 기술이다.
useMemo의 연산은 렌더링 단계에서 이루어지기 때문에 렌더링 과정과 무관하게 시간이 오래 걸리는 로직을 작성하지 않도록 해야한다.
import {useCallback} from 'react';
useMemo는 변수를 일시저장 해두는 개념이라면
useCallback은 함수를 일시저장 해두는 (메모이제이션) 개념이다.
컴포넌트가 재렌더링 될 때마다 함수가 불필요하게 다시 생성되는 것 방지해준다.
useMemo(() => {fn, [deps] })
와
useCallback(fn, [deps])
는 같은 겁니다.
import {useRef} from 'react';
컴포넌트 생애 주기 내에서 유지할 ref 객체를 반환한다.
ref 객체는 .current
라는 프로퍼티를 가지며 이 값을 자유롭게 변경할 수 있다.