component는 크게 두 가지 방식이 있다.
class형과 함수형으로 현재 리액트의 공식문서에는 함수형을 쓰도록 명시한다.
하지만 class형의 라이프사이클 함수가 component의 라이프사이클을 명확히 보여주기 때문에, 알아둘 필요가 있다.
component의 라이프사이클은 크게 생성-수정-제거의 단계로 나뉜다.
class형의 라이프사이클메서드는 생성-수정-삭제 단계를 거치며 호출되는 메서드이다.
라이프사이클메서드는 component의 라이프사이클에 따라 1 - 2 - 3 - 2(리렌더링) - 4 - 5의 과정으로 실행된다.
반면 함수형 컴포넌트에서는 클래스형 컴포넌트의 라이프사이클함수에 해당하는 useEffect를 사용한다.
useEffect는 컴포넌트가 한 번 렌더링 된 후 적어도 한 번은 실행된다.
클래스형 컴포넌트의 componentDidMount 역할을 한다고 할 수 있다.
useEffect(()=> { });
2.dependency ([괄호]) 에 아무것도 넣지 않은 유즈이펙트는 첫 렌더링 시 한 번만 실행된다.
useEffect(()=> {}, [dependency]);
예를 들어 이런식으로 useState와 useEffect를 사용한다면 name변수가 변할 때
useEffect 함수가 계속 실행된다. 클래스형 컴포넌트의 componentDidUpdate라고 생각할 수 있다.
만약 다른 요인으로 리렌더링이 되더라도 해당 변수의 값이 변하지 않는다면 useEffect는 실행되지 않는다.
const [name, setName] = useState('');
useEffect(()=>{ console.log(name);
},[name]);
const [name, setName] = useEffect;
useEffect(()=> { console.log(name);
return ()=> {console.log('stop');
};
});
const [name, setName] = useEffect;
useEffect(()=> { console.log(name);
return ()=> {
console.log('stop');
},[]});
const [name, setName] = useEffect;
useEffect(()=> { console.log(name);
return ()=> {
console.log('stop');
},[name] } );