let count = 0
function sayHello(name) { // Input
count = count + 1 // Side Effect
return `Hi, ${name}!` // Output
}
Hi, ${name}!
이외의 로직이 있다.종류 : Data Fetching, Dom 직접 접근, 구독(setInterval등) 등이 있다.
컴포넌트의 렌더링 이후에 다양한 side effects를 표현할 수 있다!
useEffect( 실행시킬 동작, [ 타이밍 ] )
document.addEventListener("타이밍", 실행시킬 동작)
const UseEffect = () => {
const [count, setCount] = useState(0);
const [clickButton, setClickButton] = useState(false);
//1. 매번 렌더링 될 때 마다 실행
useEffect(() => {
console.log("매번 렌더링 될 때마다 실행");
});
//2. count 상태가 변하면 실행
useEffect(() => {
console.log("count 상태 변하면 실행");
}, [count]);
//3. 처음 렌더링때 한번만 실행
useEffect(() => {
console.log("처음 렌더링 때 한번만 실행");
}, []);
//4. I am button 상태가 변하면 실행
useEffect(() => {
console.log("I am button 상태 변하면 실행");
}, [clickButton]);
return (
<Fragment>
<h1>{count}</h1>
<h1>{String(clickButton)}</h1>
<button
onClick={() => {
setCount(count + 1);
}}
>
setCount
</button>
<button
onClick={() => {
if (clickButton === false) {
setClickButton(true);
} else {
setClickButton(false);
}
}}
>
I am button
</button>
</Fragment>
);
};
처음 렌더링 시
setCount버튼 클릭
//state가 업데이트된다 -> effect 일으킴 -> 다음 effect 전에 cleanup!
const CleanEffect = () => {
const [count, setCount] = useState(0);
console.log("render", count);
useEffect(() => {
console.log("useEffect CallBack", count);
//여기서 clean up effect!
return () => {
console.log("cleanUp", count);
};
}, [count]);
return (
<Fragment>
<h1>{count}</h1>
<button
onClick={() => {
setCount(count + 1);
}}
>
count!
</button>
</Fragment>
);
};
// 처음 렌더링 시)
"render", 0
"useEffect Callback",0
//버튼 클릭 )
"render", 1
"cleanUp", 0
"useEffect Callback", 1
//다시 버튼 클릭 )
"render", 2
"cleanUp", 1
"useEffect Callback", 2
알것 같으면서도 모르는것 같기도 하고 생각보다 많이 어려운 개념같다. 일단 배운 내용을 복습하고 정리는 했지만 좀 더 찾아보고 제대로 이해하고 넘어가야 할 것 같다.