728x90
반응형
평생 vue.js만 써오던 사람이라, react.js는 언제 봐도 어렵다.
간단하게 useEffect에 대해 설명하자면, 마운트될 때, 언마운트될 때, 값이 변경될 때 재실행되도록 돕는 함수라는 것이다.
useEffect( ()=> { console.log(a, b, c) } )
위와 같은 형태로 사용한다.
이 예시에서는 a,b,c 값이 변경되거나, 마운트될 때, 언마운트될 때 useEffect 내의 콜백함수가 실행된다.
useEffect(() => { console.log('count 상태가 변경될 때마다 실행됩니다.'); }, [count]);
위와 같은 형태로 두번째 매개변수(배열)를 넣게 되면 매개변수값이 변경될 때에만 useEffect 내의 콜백함수가 실행된다.
useEffect의 기본 동작은 모든 렌더링을 완료한 후 effect를 발생시킨다. 값 중 하나라도 변경된다면 effect는 항상 재생성된다. 이를 해결하기 위한 것이 두번째 매개변수를 활용하는 것이다.
useEffect(() => { console.log('첫렌더링에만 호출'); }, []);
두번쨰 인자를 빈 배열로 두면 첫마운트에만 실행된다.
useEffect(() => {
console.log('state가 변경될 때 마다 호출!');
return () => {
console.log('언마운트 시 호출!')
}
})
return 값을 주면 그 이후 코드는 언마운트에 실행된다.
const UseEffectExample = () => {
const [test, setTest] = useState('initial state');
useEffect(() => {
console.log('첫 렌더링에만 호출');
return () => {
console.log('마지막 언마운트 시 호출')
}
}, [])
return 값 + 두번째 인자를 빈배열로 넣어주면
return 이전 값은 첫마운트에만 한 번 호출되고
return 이후 값은 언마운트에만 한 번 실행된다.
심화
useEffect(() => {
const userId = auth.currentUser.uid;
const requestsRef = ref(database, `users/${userId}/friendRequests`);
const friendsRef = ref(database, `users/${userId}/friends`);
const unsubscribeRequests = onValue(requestsRef, (snapshot) => {
const data = snapshot.val();
const requests = data ? Object.keys(data) : [];
setFriendRequests(requests);
});
const unsubscribeFriends = onValue(friendsRef, (snapshot) => {
const data = snapshot.val();
const friendList = data ? Object.keys(data) : [];
setFriends(friendList);
});
// Cleanup subscription on unmount
return () => {
unsubscribeRequests();
unsubscribeFriends();
};
}, []);
728x90
반응형
'개발 > React.js' 카테고리의 다른 글
[Firebase 호스팅] 시키는대로만 하면 된다. (0) | 2023.07.07 |
---|---|
[Firebase 호스팅] Welcome만 뜰 때 (0) | 2023.07.07 |
[useRef] vue의 ref와는 다르다.. 아냐 비슷한가..? (0) | 2023.07.03 |
[useState] 리액트 탐험.. useState... (0) | 2023.07.03 |
[Firebase 9] React 앱 세팅 (0) | 2023.06.26 |