React hooks
Hook은 React 16.8에 새로 추가된 기능입니다. Hook은 class를 작성하지 않고도 state와 다른 React의 기능들을 사용할 수 있게 해줍니다. -react 공식 문서-
Hook을 사용하면 계층의 변화 없이 상태 관련 로직을 재사용 가능하게 도와준다. 많이 사용되는 React Hook을 알아본다.
useState
1
| const [text, setText] = useState("");
|
- useState는 상태를 변경하고 싶을 때 사용한다.
text를 setText('changeText')를 사용해 변경 가능하다.
setText()를 호출하게되면 App()이 다시 렌더링 된다.
useEffect
1 2 3 4 5
| useEffect(()=>{ if(text === 'someText'){ ...action } }, [text])
|
- useEffect는 최초 한 번 실행되어야 하는 코드이다.
- useEffect는 생성 되었을 경우 실행된다.
- useEffect의 두 번째 인자는 해당 변수가 변화했을 때 실행되는 함수이다.
useMemo
1 2 3 4 5 6
| const App = () => { const [first, setfirst] = useState(second); const [second, setsecond] = useState(second); const sumNum = useMemo(() => first + second, [first, second]); return <div></div>; };
|
- 지정한 State나 Prop가 변경될 때 해당 값을 사용하는 다른 값을 저장하기 위해 사용한다.
- useMemo의 연산은 렌더링 단계에서 이뤄지기 때문에 시간이 오래 걸리는 로직은 작성하지 않도록 한다.
useCallback
1 2 3 4 5 6 7 8 9 10
| const App = () => { const [first, setfirst] = useState(second); const [second, setsecond] = useState(second);
const getSum = useCallback(() => { return first + second; }, [first, second]);
return <div>{getSum()}</div>; };
|
- 함수를 메모이제이션하기 위해 사용된다.
- 컴포넌트가 재렌더링 될 때 불필요하게 함수가 다시 생성되는 것을 방지한다.
useMemo(()=>func, deps)와 useCallback(func, deps)는 동일하다.
useRef
1 2 3 4 5 6 7 8 9 10 11 12
| const App = () => { const first = useRef(null); const onButtonClick = () => { first.current.focus(); }; return ( <div> <input ref={first} /> <button onClick={onButtonClick}>first로 포커스</button> </div> ); };
|
- 컴포넌트 생애 주기 내에서 유지할 ref 객체를 반환한다.
- ref는
.current라는 속성을 가지며 이 값을 자유롭게 변경 가능하다.
- React에서 DOM Element에 접근할 때 사용한다.
useRef에 의해 반환된 ref 객체가 변경되어도 컴포넌트는 재렌더링 되지 않는다.