<aside> 🔍 Effect hook을 사용하면 함수형 컴포넌트에서 Side Effect 를 수행할 수 있다.
</aside>
useEffect를 이용하여 우리는 React에게 컴포넌트가 렌더링 수행을 완료한 뒤 어떤 일을 수행해야하는지 지정해줄 수 있다. React는 우리가 useEffect의 콜백으로 넘긴 함수를 기억했다가 DOM 업데이트를 수행한 이후에 호출한다.
useEffect를 컴포넌트 내부에 둠으로써 effect를 통해 컴포넌트의 state 혹은 props에 접근할 수 있다. 함수 범위 안에 존재하기 때문에 특별한 API 없이도 값을 얻을 수 있다.
import React, { useState, useEffect } from 'react';
function FriendStatus(props) {
const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
// effect 이후에 어떻게 정리(clean-up)할 것인지 표시합니다.
return function cleanup() {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
if (isOnline === null) {
return 'Loading...';
}
return isOnline ? 'Online' : 'Offline';
}
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]); // count가 바뀔 때만 effect를 재실행합니다.