0Pricing
React Academy · 강의

일반적인 React 오류 디버깅

키 누락 경고, 정의되지 않은 state 버그, 하이드레이션 오류를 진단합니다.

일반적인 React 오류 디버깅은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

환영합니다

이 레슨에서는 가장 일반적인 React 오류인 누락된 키 경고, 정의되지 않은 상태 버그, 렌더링이 너무 많이 발생하는 문제, 하이드레이션 불일치를 진단합니다.

누락된 키 경고

React에서 다음과 같이 로그를 기록합니다: *목록의 각 자식에는 고유한 "키" 속성이 있어야 합니다.* 배열을 렌더링하면서 `key` 속성을 추가하지 않을 때 발생합니다. 각 목록 항목에 안정적이고 고유한 키를 추가하여 해결하십시오.
// Bad
items.map(item => <li>{item.name}</li>)

// Good
items.map(item => <li key={item.id}>{item.name}</li>)

정의되지 않은 속성을 읽을 수 없음

이 오류는 첫 렌더링에서 상태가 `undefined`인 경우가 많다는 뜻입니다. 항상 안전한 기본값으로 상태를 초기화하십시오(배열에는 `[]`, 객체에는 `{}`, 사용 전에 확인하는 값에는 `null`).
// Bad — crashes if data is undefined
const [data, setData] = useState();
return <p>{data.name}</p>;

// Good
const [data, setData] = useState(null);
return data ? <p>{data.name}</p> : <p>Loading...</p>;

렌더링이 너무 많이 발생하는 오류

컴포넌트가 무한 렌더링 루프에 들어가면 React는 *렌더링이 너무 많이 발생합니다*라는 오류를 발생시킵니다. 일반적으로 렌더링 중에 무조건 `setState`를 호출하거나, 모든 렌더링에서 실행되는 프롭으로 인라인 `() => setState(...)`를 직접 전달할 때 발생합니다.
// Bad — setState called on every render
function Counter() {
  const [n, setN] = useState(0);
  setN(n + 1); // infinite loop!
  return <p>{n}</p>;
}

렌더링이 너무 많이 발생하는 문제 해결

상태 업데이트를 이벤트 처리기나 useEffect 안으로 옮기십시오. 컴포넌트 본문의 최상위 수준에서 setState를 직접 호출하지 마십시오.
// Good — update only on click
function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n + 1)}>{n}</button>;
}

하이드레이션 불일치 경고

SSR 앱에서 React는 *초기 UI가 서버에서 렌더링된 내용과 일치하지 않아 하이드레이션에 실패했습니다.*라고 경고합니다. 일반적인 원인으로는 렌더링에서 `Date.now()` 또는 `Math.random()`을 사용하거나 브라우저 확장이 HTML을 삽입하는 경우가 있습니다.

하이드레이션 불일치 해결

동적 값(타임스탬프, 무작위 ID)을 `useEffect` 안에서 초기화하는 `useState`로 옮기십시오. 그러면 서버는 항상 정적인 값을 렌더링하고 클라이언트는 마운트 후 값을 업데이트합니다.
const [ts, setTs] = useState('');
useEffect(() => {
  setTs(Date.now().toString());
}, []);
return <p>{ts}</p>;

상태가 즉시 업데이트되지 않음

`setState`는 비동기적으로 동작한다는 점을 기억하십시오. 호출 직후 상태를 기록하면 이전 값이 표시됩니다. 업데이트된 값을 확인하려면 상태 변수를 종속성으로 가진 `useEffect` 안에서 기록하십시오.
const [count, setCount] = useState(0);

function handleClick() {
  setCount(count + 1);
  console.log(count); // still old value!
}

useEffect(() => {
  console.log('updated:', count); // correct
}, [count]);

프롭 변경 시 컴포넌트가 업데이트되지 않음

프롭이 변경되어도 컴포넌트가 업데이트되지 않는다면 객체나 배열을 직접 변경하고 있지 않은지 확인하십시오. React는 참조 동일성을 사용하므로 기존 객체를 변경해도 다시 렌더링되지 않습니다.
// Bad — same reference, no re-render
const list = [];
list.push('item');
setList(list);

// Good — new array reference
setList([...list, 'item']);

오류 오버레이에서 오류 읽기

개발 환경에서 React 앱이 중단되면 브라우저에 오류 오버레이가 나타납니다. 하단의 **컴포넌트 스택**을 읽으십시오. 이 스택에는 오류가 발생한 컴포넌트를 렌더링한 모든 컴포넌트가 표시되므로 버그의 원인을 명확히 알 수 있습니다.

빠른 확인

React에서 '렌더링이 너무 많이 발생합니다' 오류가 발생하는 가장 일반적인 원인은 무엇인가요?

복습

이제 가장 일반적인 React 오류를 해결할 수 있습니다. 목록에 안정적인 키를 추가하고, 상태를 안전하게 초기화하고, 렌더링 중 setState 호출을 피하고, 하이드레이션 불일치를 처리하고, 오류 오버레이의 컴포넌트 스택을 읽을 수 있습니다.

과정 완료

축하합니다! **React DevTools 및 디버깅** 과정을 완료하셨습니다. 이제 DevTools를 설치하고, 컴포넌트 트리와 상태를 검사하고, 렌더링을 프로파일링하고, 가장 자주 발생하는 React 런타임 오류를 진단할 수 있습니다.

자주 묻는 질문

“일반적인 React 오류 디버깅” 강의는 무료인가요?

네 — “일반적인 React 오류 디버깅” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“일반적인 React 오류 디버깅”에서 뭘 배우나요?

키 누락 경고, 정의되지 않은 state 버그, 하이드레이션 오류를 진단합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

React Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“일반적인 React 오류 디버깅” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. React DevTools 설치 및 열기
  2. 구성 요소 트리 및 props 검사
  3. Profiler 탭 사용하기
  4. 일반적인 React 오류 디버깅
← React Academy(으)로 돌아가기