useContext로 가져온 컨텍스트 값이 useEffect에서 사용된다면, 해당 컨텍스트 값을 의존성 배열에 포함해야 합니다. 컨텍스트 값이 변경될 때 useEffect가 다시 실행됩니다.
const ThemeContext = React.createContext();
const MyComponent = () => {
const theme = useContext(ThemeContext);
useEffect(() => {
console.log(`Theme changed: ${theme}`);
}, [theme]); // theme 값이 변경될 때마다 실행
};
5. Memoized 값
useMemo를 통해 계산된 값이 useEffect에서 사용된다면, 해당 값을 의존성 배열에 포함해야 합니다. 계산된 값이 변경되면 useEffect가 다시 실행됩니다.
const computedValue = useMemo(() => calculateSomething(dep1, dep2), [dep1, dep2]);
useEffect(() => {
console.log(`Computed value changed: ${computedValue}`);
}, [computedValue]); // computedValue가 변경될 때마다 실행
6. 외부 변수
컴포넌트 외부에서 정의된 변수나 객체를 사용하는 경우, 해당 참조를 의존성 배열에 포함해야 최신 값을 참조할 수 있습니다.
let externalValue = 0;
const MyComponent = () => {
useEffect(() => {
console.log(`External value: ${externalValue}`);
}, [externalValue]); // 외부 값이 변경될 때마다 실행
};
의존성 배열에 포함하지 않아야 할 것들
1. 불필요한 포함: 의존성 배열에 포함하지 않아도 되는 값(정적인 값, 변하지 않는 값 등)을 포함하면 불필요한 실행이 발생합니다.
const staticValue = 42;
useEffect(() => {
console.log("This runs unnecessarily");
}, [staticValue]); // staticValue는 변하지 않으므로 포함하지 않아도 됨
2. useEffect 내부에서 선언된 변수: 내부에서 선언된 변수는 의존성 배열에 추가하지 않아도 됩니다.