useEffect
란?useEffect
를 사용하면 component가 rendering 될 때마다 콜백 함수의 내용을 실행시킬 수 있게 된다.rendering
될까?useState
를 통해 state 변수의 값을 바꿀 때 rendering 된다. 즉, 바뀌는 값이 존재하지 않으면 useEffect는 아무런 의미를 갖지 않는다.parameter
의 의미는?맨 처음 렌더링 될 때 한 번, 그 후 어떤 state가 하나라도 바뀔 때마다 콜백 함수가 실행된다.
[]
맨 처음 렌더링 될 때 한 번만 콜백 함수가 실행된다.
[stateExample]
맨 처음 렌더링 될 때 한 번, 그리고 stateExample
이 바뀔 때 콜백 함수가 실행된다.
useEffect(() => {
console.log("useEffect");
fetch(`https://jsonplaceholder.typicode.com/${resourceType}`)
.then(response => response.json())
.then(json => setItems(json));
return () => {
console.log("clean-up");
};
}, [resourceType]);
return
이 먼저 실행되고 난 후 콜백 함수가 마저 실행된다.clean-up > useEffect
순으로 출력된다.Component
내의 코드는 어떤 순서를 갖을까?function App() {
console.log("1");
useEffect(() => {
console.log("useEffect");
});
console.log("2");
return (
// ..
);
}
1 > 2 > useEffect
순으로 출력된다.useEffect
는 맨 나중에 실행되는 것으로 알고있자.useEffect
의 2번째 parameter가 없으면 rendering
될 때마다 실행된다. 이는 useEffect
없이 선언된 함수와 동일한 의미를 갖는다.ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById("root")
);
index.js
에서 <React.StrictMode>
가 <App />
을 감싸고 있었기 때문에 useEffect
가 한 번 더 실행될 수 있다.<React.StrictMode>
를 지워도, 지우지 않아도 useEffect
가 문제 없이 실행된다(?).button
태그의 속성 onClick
이나 input
태그의 onChange
등 자주 쓰는 것들을 따로 공부할 필요가 있다.