일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- js
- CSS
- 머신러닝
- styledcomonents
- error맛집
- 딥러닝
- typeScript
- REACT
- TS
- 타입스크립트
- clipboardapi
- axios
- 알고리즘
- 백준
- 에러해결방안
- 혼공챌린지
- 구조분해할당
- 혼자공부하는머신러닝
- 초기값 설정하기
- 리액트
- 코딩테스트
- Redux
- 백준 #코딩테스트 #코테 #알고리즘
- reactmemo
- 백준 #코딩테스트
- 혼공단
- useEffect
- 유니티 #게임개발
- 혼자공부하는머신러닝딥러닝
- 혼공머신
- Today
- Total
좌충우돌 개발자의 길
[React] 리액트 hook 정리 본문
hook hook 불면 기능이 넘치는 커다란 리액트 훅~
1. hook은 리액트에서 제공하는 내장 hook과 내가 직접 만든 custom hook으로 나뉜다
- 리액트에서 제공해주는 내장 hook : useState, useEffect, useParams,.... 등등
- custom hook : use___ 이렇게 작성! (여태 나는 반대로 알고 있었다 머쓱~)
2. hook 사용 시, 꼭 지켜야 할 규칙들
- 최상위에서만 hook 호출하자 (반복문, 조건문, 중첩된 함수 내에서 실행 금지!)
- React 함수 컴포넌트 내에서만 hook 호출하자
3. 내장 hook
- 기본 hook
1) useState
2) useEffect
=> 이 두 hook은 다른 글에서 자세히 다루었으므로 생략!
3) useContext
const value = useContext(MyContext);
- context 객체(React.createContext에서 반환된 값)을 받아 그 context의 현재 값을 반환
- context의 현재 값은 트리 안에서 이 Hook을 호출하는 컴포넌트에 가장 가까이에 있는 <MyContext.Provider>의 value prop에 의해 결정
- useContext의 인자 : context 객체 그 자체 여야함 (ex/ useContext(MyContext))
- context 값이 변경될 때마다 항상 리렌더링
- useContext를 Context.Provider와 같이 사용하자
// 예시
const themes = {
light: {
foreground: "#000000",
background: "#eeeeee"
},
dark: {
foreground: "#ffffff",
background: "#222222"
}
};
const ThemeContext = React.createContext(themes.light);
function App() {
return (
<ThemeContext.Provider value={themes.dark}>
<Toolbar />
</ThemeContext.Provider>
);
}
function Toolbar(props) {
return (
<div>
<ThemedButton />
</div>
);
}
function ThemedButton() {
const theme = useContext(ThemeContext);
return (
<button style={{ background: theme.background, color: theme.foreground }}>
I am styled by theme context!
</button>
);
}
- 추가 Hook
: 다른 훅은 뭐가 있나 살펴봤더니 useRef 말고 없었다... 그래서 하나하나 읽어보기로 결정!
1) useReducer
const [state, dispatch] = useReducer(reducer, initialArg, init);
// 두번째 인자 : 초기 state 전달
// 세번째 인자 : 초기 state를 조금 지연해서 생성
- useState의 대체 함수
- 다수의 하윗값을 포함하는 복잡한 정적 로직을 만드는 경우나 다음 state가 이전 state에 의존적인 경우에 보통 useState보다 useReducer를 선호
- 자세한 업데이트를 트리거 하는 컴포넌트의 성능을 최적화할 수 있게 하는데, 이것은 콜백 대신 dispatch를 전달 할 수 있기 때문
2) useCallback
const memoizedCallback = useCallback(
() => {
doSomething(a, b);
},
[a, b],
);
- useCallback은 콜백의 메모이제이션된 버전을 반환 (메모이제이션된 콜백을 반환)
--> 메모이제이션(memoization)은 컴퓨터 프로그램이 동일한 계산을 반복해야 할 때, 이전에 계산한 값을 메모리에 저장함으로써 동일한 계산의 반복 수행을 제거하여 프로그램 실행 속도를 빠르게 하는 기술
- 콜백의 의존성이 변경되었을 때에만 변경
- 불필요한 렌더링을 방지
3) useMemo
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
- 메모이제이션된 값을 반환
- useMemo는 의존성이 변경되었을 때에만 메모이제이션된 값만 다시 계산
- 모든 렌더링 시의 고비용 계산을 방지
- useMemo로 전달된 함수는 렌더링 중에 실행됨으로 렌더링 중에 하지 않는 것을 이 함수 내에서 하면 안됨
'STUDYING > React' 카테고리의 다른 글
[React] 리액트로 성능 개선하기 1 - useMemo (2) | 2023.01.19 |
---|---|
[React] useState의 초기값 내가 원하는 값으로 지정하기 (0) | 2022.07.24 |
[React] useEffect와 axios를 같이 사용할 때 무한루프 에러 해결하기 (0) | 2022.07.24 |
[React] onClick 안의 함수의 파라미터로 데이터 전달하기 (0) | 2022.07.22 |
[React] CORS 에러 해결 (0) | 2022.07.18 |