부작용 이라는 뜻을 가지고 있는데, 부수효과 의 느낌으로 주요한 효과에 따라서 발생하는 것을 말하는 것이다.(1-1) 외부의 상태를 읽어오기
const num = 1;
const result = (x) => {
return x + num;
}
(1-2) 외부의 상태를 변형시키기
let num;
const result = (x) => {
num = x + 1;
}
(2-1) Data Fetching
(2-2) DOM 접근 및 조작
(2-3) 구독
React 에서 Side Effect를 언제 발생시켜야 하는지에 대한 조건은?
- 랜더링이 모두 마운팅 되고난 이후에 Side Effect를 실행해야 한다.
- 내가 원할때만 조건부로 실행할 수 있어야 한다.
(3-1) UseEffect 사용 방법
useEffect(()=> {
alert('이곳은 useEffect가 동작하는 곳입니다');
},[])
(3-2) UseEffect 동작 방식
렌더링 이후에는 무조건 useEffect에 전달된 콜백 함수를 호출하고 다음 렌더링부터는 아래의 조건에 따라 동작한다.
1) 의존성 배열이 전달되지 않았다면, 매번 랜더링때마다 콜백 함수를 호출한다.
2) 의존성 배열이 전달되었다면, 의존성 배열의 값을 검사한다.
3) 의존성 배열에 있는 값 중 하나라도 이전 렌더링과 비교했을 때 달라졌다면 콜백 함수를 호출한다.
4) 의존성 배열에 있는 값 중 하나라도 이전 렌더링과 비교했을 때 달라지지 않았다면 콜백 함수를 호출하지 않는다.
결론적으로 useEffect의 첫번째 인자로 받는 콜백함수는 useEffect를 실행시킬 동작을 결정하고, 두번째 인자로 받는 의존성 배열은 실행시킬 타이밍을 결정짓는다.
(3-3) 조건부 없이 Side Effect(UseEffect) 동작 시키기
import React from 'react';
const App = () => {
console.log('이곳은 useEffect가 동작하지 않는 곳입니다.'); // 1
useEffect(() => {
console.log('이곳은 useEffect가 동작하는 곳입니다'); // 2
})
console.log('이곳은 콘솔이 출력된 이후에 JSX를 return 하여 랜더링 됩니다.') // 3
return (
<h1>Hello Kim</h1>
);
}
export default App;
1번 요약)
2번 요약)
3번 요약)
(3-4) 조건부로 Side Effect(UseEffect) 동작 시키기
useEffect(()=> {
alert('이곳은 useEffect가 동작하는 곳입니다');
},[])
// () : 인자(매개변수)
// () => {} : 콜백함수
// [] : 의존성 배열
// 1
useEffect(() => {
// sideEffect
})
// 2
useEffect(() => {
// sideEffect
}, [value])
// 3
useEffect(() => {
// sideEffect
}, [value1, value2])
1번 요약)
2번 요약)
3번 요약)
(4-1) 요약
1. 컴포넌트가 실행될때 처음 마운트 되어 랜더링 시킨다.
(최초로 진행되는 렌더링은 브라우저에 처음으로 이 컴포넌트가 보였다는 의미를 가진것으로 이해하면 된다.)
2. useEffect 첫 번째 인자로 넘겨준 콜백 함수가 호출된다. (Side Effect)
3. 컴포넌트의 state 또는 props가 변경되었을 경우 리렌더링이 발생한다. (updated)
4. useEffect는 두 번째 인자에 들어있는 의존성 배열을 확인한다
- A. 만약 의존성 배열이 전달되지 않았거나 / 의존성 배열 내부의 값 중 이전 렌더링과 비교했을 때 변경된 값이 하나라도 있다면 첫 번째 인자로 넘겨준 콜백 함수가 호출된다. (Side Effect)
- B. 의존성 배열 내부의 값 중 이전 렌더링과 비교했을 때 변경된 값이 없다면 콜백 함수를 호출하지 않는다.
- C. state 또는 props가 변경된다면 3~4의 과정을 반복한다.