일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Data Structure
- JavaScript
- Algorithm
- IT
- 디자인 패턴
- OS
- 자바
- Spring
- 컴퓨터구조
- Kafka
- MySQL
- design pattern
- Java
- 파이썬
- 백준
- react
- spring webflux
- c언어
- Galera Cluster
- Heap
- 자료구조
- 운영체제
- 알고리즘
- MSA
- JPA
- mongoDB
- redis
- C
- Proxy
- 네트워크
Archives
- Today
- Total
시냅스
TIL : React { Hooks } 본문
Hook
- 함수 컴포넌트에서 React state와 생명주기 기능(lifecycle features)을 연동(hook into)할 수 있게 해주는 함수
- 사용규칙
- 최상위에서만 사용해야 한다
- React 함수 컴포넌트 내에서만 호출해야 한다
State Hook
- useState
- state, setState 함수를 쌍으로 제공
- 이벤트 핸들러나 다른 곳에서도 호출 가능
const [state, setState] = useState(() => {
const initialState = someExpensiveComputation(props);
return initialState;
});
- 위와 같이 렌더링 초기에만 initialState를 사용할 수 있음
- 초기렌더링이 고비용일 때 이용 가능, 렌더링 이후 initialState는 무시 됨
Effect Hook
- 컴포넌트 안에서 데이터를 가져오거나 구독, DOM을 직접 조작한 때 'side effects' 라고 부름
- 'side effects'는 다른 컴포넌트에 영향을 줄 수도 있고, 렌더링 과정에서는 구현할 수 없는 작업
- useEffect는 componentDidMount, componentDidUpdate, componentWillUnmount의 통합
- 렌더링과 모든 업데이트 이후에 어떤 일을 수행해야 하는지를 useEffect에서 정의
- 관심사를 구분한다면 Effect를 여러개 사용한다.
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
// componentDidMount, componentDidUpdate와 비슷합니다
useEffect(() => {
// 브라우저 API를 이용해 문서의 타이틀을 업데이트합니다
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
- 위 코드는 effect 내에서 선언되었기 때문에 props와 state에 접근할 수 있었다.
- 매 렌더링 마다 effects를 실행
useCallback
- 메모이제이션 된 콜백을 반환
- 콜백의 메모이제이션 된 버전을 반환하는데, 메모이제이션된 버전은 콜백의 의존성이 변경되었을 때만 변경
const memoizedCallback = useCallback( () => { doSomething(a, b); }, [a, b], );
useMemo
- 메모이제이션된 값을 반환 마찬가지로 의존성이 변경되었을 때에면 다시 계산
- 최적화에 용이
- useMemo는 렌더링 중에 실행
- 사이드 이펙트는 useEffect에서만 해야 함
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
'ReactJS' 카테고리의 다른 글
React-Query 사용법 (0) | 2021.12.03 |
---|---|
React Hook Form 사용법 (0) | 2021.12.02 |
React에서 dotenv를 사용하는 방법 (0) | 2021.11.27 |
React connected-react-router, react-router-dom, history 버전 충돌 (0) | 2021.11.23 |
TIL : React { Code splitting } (0) | 2021.11.18 |
Comments