※ 강의를 듣고 제가 이해한 것을 바탕으로 정리한 것이라서 오류가 있을 수 있습니다.
- useEffect 라는 Hook 을 사용하여 컴포넌트가 마운트 됐을 때 (처음 나타났을 때), 언마운트 됐을 때 (사라질 때), 그리고 업데이트 될 때 (특정 props가 바뀔 때) 특정 작업을 처리하는 방법 -
1. 마운트 / 언마운트
UserList.js(파일명)
import React, {useEffect} from 'react';
function User({user, onRemove, onToggle}) {
const {username, email, id, active} = user;
useEffect( () => {
console.log('컴포넌트가 화면에 나타남');
return () => {
console.log('컴포넌트가 화면에서 사라짐');
}
}, []);
return (
<div>
<b
style={{
color: active ? 'green' : 'black',
cursor: 'pointer'
}}
onClick={() => onToggle(id)}
>
{username}
</b>
<span>({email})</span>
<button onClick={() => onRemove(id)}>삭제</button>
</div>
);
}
function UserList({users, onRemove, onToggle}) {
return (
<>
{
users.map(
user => (
<User
user={user}
key={user.id}
onRemove={onRemove}
onToggle={onToggle}
/>
)
)
}
</>
);
}
export default UserList;
useEffect 를 사용 할 때에는 첫번째 파라미터에는 함수 두번째 파라미터에는 의존값이 들어있는 배열 (deps)을 넣으면 된다. 만약에 deps 배열을 비우게 된다면 컴포넌트가 처음 나타날때에만 useEffect 에 등록한 함수가 호출 된다.
그리고 useEffect 에서는 함수를 반환 할 수 있는데 이를 cleanup 함수라고 부르는데
cleanup 함수는 useEffect 에 대한 뒷정리를 해준다고 이해하시면 된다.
deps 가 비어있는 경우에는 컴포넌트가 사라질 때 cleanup 함수가 호출 된다.
실행 결과
화면에 컴포넌트가 마운트 됬을 때 코드에 출력 하라고 적어둔 ' 컴포넌트가 화면에 나타남'이 콘솔창에 출력 되는 것을 확인 할 수 있다.
또한 화면의 3개의 컴포넌트 중 마지막 컴포넌트를 삭제 하니 컴포넌트가 언마운트 되서 콘솔창에 '컴포넌트가 화면에서 사라짐'이라고 출력 되는 것을 볼 수 있다.
2. deps 에 특정 값 넣기
import React, {useEffect} from 'react';
function User({user, onRemove, onToggle}) {
const {username, email, id, active} = user;
useEffect( () => {
console.log('user 값이 설정 됨');
console.log(user);
return () => {
console.log('user 값이 바뀌기 전...');
console.log(user);
}
}, [user]);
return (
<div>
<b
style={{
color: active ? 'green' : 'black',
cursor: 'pointer'
}}
onClick={() => onToggle(id)}
>
{username}
</b>
<span>({email})</span>
<button onClick={() => onRemove(id)}>삭제</button>
</div>
);
}
function UserList({users, onRemove, onToggle}) {
return (
<>
{
users.map(
user => (
<User
user={user}
key={user.id}
onRemove={onRemove}
onToggle={onToggle}
/>
)
)
}
</>
);
}
export default UserList;
deps 에 특정 값을 넣게 된다면 컴포넌트가 처음 마운트 될 때에도 호출이 되고 지정한 값이 바뀔 때에도 호출이 된다. 그리고 deps 안에 특정 값이 있다면 언마운트시에도 호출이되고 값이 바뀌기 직전에도 호출이 된다.
실행 결과
컴포넌트가 처음 마운트 될 때 호출됨
새로운 컴포넌트가 추가 될 때 호출되고 수정 될시에도 호출 되고 삭제 될 때에도 호출 되는 것을 볼 수 있다.
'개발 공부한 내용 정리 > React' 카테고리의 다른 글
React- useCallback을 사용하여 함수 재사용 하기 (0) | 2020.09.24 |
---|---|
React- useMemo 를 사용하여 연산한 값 재사용하기 (0) | 2020.09.12 |
React- 배열의 항목 수정하기 (0) | 2020.09.04 |
React- 배열의 항목 제거 하기 (0) | 2020.09.03 |
React- 배열에 항목 추가 하기 (0) | 2020.09.02 |