해당 시리즈의 포스트는 개념 및 이론 정리
와 개인적인 코딩 기록
이 혼용되어 포스팅됩니다. 참고 부탁드립니다.
리액트를 공부하면서 useState, useEffect 등의 기능들을 익힐 수 있었는데, 이 기능들은 원래 초기 ReactJS부터 있던 기능이 아니라 차후 편의성과 효율의 증대를 위해 추가된 기능들이다.
이러한 Hooks엔 어떤 것들이 있고, 이 기능들의 정확한 의미를 어떤 것인지 알아보자.
Hook
은 React의 버전 16.8부터 새로 추가되었다. Hooks의 등장으로 기존에 class형 컴포넌트를 이용한 개발 방식에서 벗어날 수 있었다.
특히 비슷한 로직 연관성을 지닌 함수끼리 묶였다는 것에서 큰 의미를 지니는데 이는 React사이트의 Hooks motivation문서에서 참고토록 하자.
먼저 state를 관리할 수 있도록 해주는 useState
가 있다. 이 함수를 이용해 우리는 현재의 state값과 이 state를 업데이트시키는 함수를 함께 묶어서 만들어낼 수 있다.
const [movie, setMovie] = useState([]);
그리고 이렇게 만들어진 업데이트 함수는 다른 곳에서 호출하여 사용 가능하다.
useState는 인자로 초기값을 받으며, 이 초기값은 렌더링에만 딱 한번 사용된다.
useEffect
는 다른 컴포넌트에 영향을 줄 수 있고, 렌더링 과정에서는 구현할 수 없는 작업을 일컫는 side effects 를 수행할 수 있도록 해준다.
ex) 데이터 가져오기, 구독, DOM조작
useEffect(() => {
window.addEventListener("scroll", () => {
if (window.scrollY > 50) {
setShow(true);
} else {
setShow(false);
}
});
return () => {
window.removeEventListener("scroll", () => {});
};
}, []);
이러한 useEffect는 React class의 componentDidMount
, componentDidUpdate
, componentWillUnmount
와 같은 목적으로 제공되며,
이러한 기능을 하나의 API로 통합한 것이라고 할 수 있다.
useEffect
를 이용하면 React는 DOM을 바꾼 뒤 이 effect함수를 실행할 것이다.
이는 컴포넌트 안에서 선언되어 있기 때문에 props나 state에 접근 가능하다. 또한 첫 렌더링을 포함하여 매 렌더링 이후에 effect함수가 실행된다.
이 외에도 다른 Hooks와 직접 만들어서 사용하는 custom Hook이 존재한다.
이는 다음에 자세히 알아보도록하자.
또한 useState
와 useEffect
의 자세한 사용법도 따로 정리하도록 할 것이다.
Hook은 두가지 규칙이 지켜져야 한다.
최상위에서만 호출되어야 한다.
React컴포넌트 내에서만 Hook을 호출해야한다.
잘못된 부분에 대한 지적은 얼마든지 환영입니다.
감사합니다.