함수형 comonent에서 state를 사용할 수 있는 함수
const [count, setCount] = useState(0);
// state값과 이 값을 업데이트하는 함수를 제공
class형 component에서의 state와 동일하며, 리렌더링 되어도 값을 유지
함수 컴포넌트 내에서 side effects를 수행할 수 있게 해줌
(side effect란 데이터를 가져오거나 구독하고, DOM을 조작하는 동작들)
props, state에 접근 가능
Component가 렌더링된 후에 호출하여 side effect 실행
effect를 해제(ex.unscribe 동작)하려면 해제 함수를 리턴 처리
useEffect(() => {
suscribe()
// 렌더링된 후 호출
return () => unSubscribe()
// unmount 되거나 렌더링 되기 전에 호출
}
Class형 component에서는 각각의 생명 주기 마다 필요한 함수를 따로 호출해야했지만 Hook을 사용하면 관련 코드를 한 곳에서 관리
memozation된 콜백을 반환하는 hook
const callback = useCallback(() => {
doSomething(a, b)
}
// 반환할 함수 정의
, [a, b]);
// 의존성값을 배열로 정의. 이 값들이 변경될 때마다 함수를 새로 반환
배열로 정의한 값들이 변경될 때만 첫번째 인자인 함수를 새로 생성하여 반환. 그 외의 경우에는 memozation된 함수를 반환
불필요한 렌더링을 방지할 때 사용
memozation된 값을 반환하는 hook
const value = useMemo(
() => doSometion(a,b)
// 정의된 함수의 결과값을 반환
, [a, b]);
// 의존성값을 배열로 정의. 이 값들이 변경될 때마다 결과값을 새로 계산
배열로 정의한 값들이 변경될 때만 결과값을 새로 계산
해당 함수는 렌더링 중에 실행됨에 주의. -> side effect와 같은 작업은 useEffect에서 실행
배열에 값이 없는 경우 렌더링 시 매번 결과값을 새로 생성
ref 객체를 반환하는 hook
const element = useRef(null);
...
return(
<input ref={element}></input>
)
자식 element에 명령적(직접적이라는 의미인듯?)으로 접근하는 경우 사용
부모 component에서 ref에 접근 가능한 hook ?
모든 DOM 변경 후 동기적으로 호출되는 hook
브라우저에 그려지기 전에 호출할 때 사용
React 개발자 도구에서 custom hook의 레이블을 표시할 때 사용