이해되는 영역까지만 번역 기록을 남긴다
useEffect는 컴포넌트 최상단에서 effect를 선언한다.
import { useEffect } from 'react';
import { createConnection } from './chat.js';
function ChatRoom({ roomId }) {
const [serverUrl, setServerUrl] = useState('https://localhost:1234');
useEffect(() => {
const connection = createConnection(serverUrl, roomId);
connection.connect();
return () => {
connection.disconnect();
};
}, [serverUrl, roomId]);
// ...
}
⚙
useEffect는 비동기적으로 작업을 처리하고 컴포넌트의 렌더링이 완료된 후에 Effect를 실행합니다. 이는 일반적으로 대부분의 경우에 적합한 방식입니다. 하지만 시각적인 작업을 수행하는 Effect의 경우, 화면이 업데이트되기 전에 Effect가 실행되면 불필요한 화면 깜빡임과 같은 문제가 발생할 수 있습니다.
이 때문에 useLayoutEffect가 도입되었습니다. useLayoutEffect는 useEffect와 유사하지만, 브라우저가 화면을 그리기 전에 Effect를 동기적으로 실행합니다. 즉, 화면 업데이트와 Effect 실행 사이에 딜레이가 없습니다. 이를 통해 시각적인 작업을 정확하게 처리하고 깜빡임과 같은 문제를 방지할 수 있습니다.
➕ 외부 시스템
네트워크, 브라우저 API, 제 3자 라이브러리와 연결되는 경우 react로 제어되지 않기 때문에 외부라고 부름
- setInterval() 및 clearInterval()을 사용하여 관리되는 타이머.
- window.addEventListener() 및 window.removeEventListener()를 사용한 이벤트 구독.
- animation.start() 및 animation.reset()과 같은 API를 사용하는 제3자 애니메이션 라이브러리.
챗GPT 답변
window.addEventListener()는 브라우저의 이벤트 시스템과 상호작용하기 위해 사용되는 함수입니다. 이벤트를 수신하고 처리하기 위해 브라우저의 "외부 시스템"과 연결하는 것으로 간주할 수 있습니다.
반면, onClick과 같은 React의 이벤트 핸들러는 React 컴포넌트 내부에서 정의되고 사용되는 것입니다. React는 내부적으로 이벤트 핸들러를 관리하고 이벤트 시스템을 추상화하여 컴포넌트와 상호작용하는 데 사용됩니다. 따라서 onClick과 같은 React의 이벤트 핸들러는 "내부 시스템"으로 간주할 수 있습니다.
예제