- React에서의 re-render는 state와 prop이 변화되었을 때 일어난다.
- useEffect는 sideEffect를 다루기 위해 사용되는 hook이다.
- useEffect는 매 렌더가 마무리된 후 실행된다. → 렌더가 없으면 실행되지 않는다!
// 👎🏻
const [data, setData] = useState<dataInstance>();
useEffect(() => {
if(!rawData) return;
setData(createDataInstance(rawData));
},[rawData]);
// 👍🏻
const data = useMemo(() => {
if (!rawData) return undefined;
return createDataInstance(rawData);
}, [rawData]);
모든 렌더링은 모두 고유의 prop, state, event handler, effect....를 가진다.
// 원본
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
// 처음 랜더링 시
function Counter() {
const count = 0; // useState() 로부터 리턴
// ...
<p>You clicked {count} times</p>
// ...
}
// 클릭하면 함수가 다시 호출된다
function Counter() {
const count = 1; // useState() 로부터 리턴
// ...
<p>You clicked {count} times</p>
// ...
}
// 또 한번 클릭하면, 다시 함수가 호출된다
function Counter() {
const count = 2; // useState() 로부터 리턴
// ...
<p>You clicked {count} times</p>
// ...
}
state를 업데이트할 때마다, 리액트는 컴포넌트를 호출한다.
매 랜더 결과물은 고유의 counter 상태 값을 “살펴본다”. 그리고 이 값은 함수 안에 상수로 존재하는 값이다.
즉 react의 렌더링은 pure하다 (state, prop, context) => JSX : pure function