Lifecycle.js
import React, {useEffect, useState} from 'react';
const Lifecycle = () => {
const [count, setCout] = useState(0);
const [text, setText] = useState('');
useEffect(()=>{
console.log('Mount!');
},[])
return (
<div style={{ padding:20 }}>
<div>
{count}
<button onClick={()=>setCout(count+1)}>+</button>
</div>
<div>
<input value={text} onChange={(e)=>setText(e.target.value)}/>
</div>
</div>
);
}
export default Lifecycle;
useEffect(()=>{
console.log('Mount!');
},[])
useEffect 의 [] 빈 배열을 전달하면, 처음생성 마운트된 시점에만 작동이됨으로, 값이 바뀌더라고 (리렌더되더라도) 아무 동작도 하지않는다.
useEffect(()=>{
console.log('Update!');
})
useEffect 의 아무것도 전달하지않으면, 상태가 변화할때마다 Update가 출력되게 된다.
useEffect(()=>{
console.log(`count is update : ${count}`);
}, [count]);
useEffect(()=>{
console.log(`text is update : ${text}`);
}, [text]);
[cout], [text] 값이 변화 할때만 작동한다.
이렇게 디펜던시어레이를 [] 사용하면, 우리가 값을 감지하고 싶은 순간에만 콜백함수를 수행 시키게 할 수 있다.
예제
useEffect(()=>{
console.log(`count is update : ${count}`);
if(count>5){
alert('count가 5를 넘었습니다. 따라서 1로 초기화합니다');
setCout(1);
}
}, [count]);
import React, {useEffect, useState} from 'react';
const UnmountTest = () => {
return <div>Unmount Testing Component</div>
}
const Lifecycle = () => {
const [isVisible, setIsVisible] = useState(false);
const toggle = () => setIsVisible(!isVisible);
return (
<div style={{ padding:20 }}>
<button onClick={toggle}>ON/OFF</button>
{isVisible && <UnmountTest/>}
</div>
);
}
export default Lifecycle;
모든 피연산자와 연산자를 평가하지 않고서도 식의 결과가 결정되는 것을 의미한다.
{isVisible && <UnmountTest/>}
isVisible true라면, UnmountTest 보여지게 된다.
Unmount는 useEffect에서 return값을 실행해주면 unmount시점이된다. (죽음- 값이 사라짐)
const UnmountTest = () => {
useEffect(()=>{
console.log('Mount!');
return() => {
//Unmount 시점에 실행됨
console.log('Unmount!');
}
}, []);
return <div>Unmount Testing Component</div>
}