티스토리 뷰
React Hook을 알아보기 전에 Class Component 와 Functional Component 를 비교합니다.
Class Component vs Functional Component
- Class ComponentsetState() 함수를 통해 state를 업데이트합니다.
- Lifecycle methods 제공합니다.
- 생성자 ( constructor ) 에서 state를 정의합니다.
- Functional ComponentLifeCycle에 따른 기능 구현 불가합니다.
- Hook이 나오면서 useEffect,useState를 이용해 Mount, Update, Unmount 가 가능하게 됨
- 제공하는 기능은 한정적이지만 코드가 짧아지고 간단합니다.
Hook이란 ?
원하는 시점에 정해진 함수(state 관련 함수, Lifecycle 함수, 최적화 관련 함수) 를 실행되도록 만든 것 입니다. 이 때 실행되는 함수를 Hook 이라고 합니다.
1. Usestate
2. useEffect
3. useMemo, useCallback, useRef
Hook 규칙
- 최상위(at the Top Level)에서만 Hook을 호출해야 합니다, 반복문, 조건문 혹은 중첩된 함수 내에서 Hook을 호출하지 않아야 합니다.
<잘못된 예>
if (name !== '') {
useEffect(function persistForm() {
localStorage.setItem('formData', name);
});
}
<올바른 예>
useEffect(function persistForm() {
// 👍 더 이상 첫 번째 규칙을 어기지 않습니다
if (name !== '') {
localStorage.setItem('formData', name);
}
})
2. React 함수 컴포넌트에서만 Hook을 호출해야 합니다
Hook 규칙을 위한 참고 : ESLint 플러그인
https://ko.reactjs.org/docs/hooks-rules.html#eslint-plugin
Hook의 규칙 – React
A JavaScript library for building user interfaces
ko.legacy.reactjs.org
// ESLint 설정 파일
{
"plugins": [
// ...
"react-hooks"
],
"rules": {
// ...
"react-hooks/rules-of-hooks": "error", // Checks rules of Hooks
"react-hooks/exhaustive-deps": "warn" // Checks effect dependencies
}
}
Custom Hook
Custom Hook은 이름이 use로 시작하고 내부에서 다른 hook을 호출하는 하나의 자바스크립트 함수 입니다.
무엇을 인수로 받아야 하며 필요하다면 무엇을 반환해야 하는 지를 사용자가 결정할 수 있습니다.
Custom Hook의 이름은 꼭 use로 시작해야합니다. 특정한 함수가 그 안에서 Hook을 호출하는지를 알 수 없기 때문에 Hook 규칙의 위반 여부를 자동으로 체크할 수 없습니다.
같은 Hook을 사용하는 두개의 컴포넌트는 state를 공유하지 않습니다. 그 안의 state와 effect는 완전히 독립적입니다. 각각의 Hook에 대한 호출은 서로 분리(독립)된 state를 받습니다. Custom Hook을 직접적으로 호출하기 때문에 각각의 useState와 useEffect를 호출한 것입니다. 하나의 컴포넌트 안에서 useState와 useEffect를 여러 번 부를 수 있고 이들은 모두 완전히 독립적입니다.
https://ko.reactjs.org/docs/hooks-custom.html
자신만의 Hook 만들기 – React
A JavaScript library for building user interfaces
ko.legacy.reactjs.org
'프론트엔드 > React' 카테고리의 다른 글
| [React] Tab Menu 탭 메뉴 기능 구현 (0) | 2023.06.27 |
|---|---|
| [React] excel download 기능 구현하기 (0) | 2023.06.27 |
| [react-router-dom] useParams (0) | 2023.02.17 |
| Redux (0) | 2023.02.03 |
| React Router Dom (0) | 2023.02.02 |
- Total
- Today
- Yesterday
- 리액트 포탈
- react
- 프론트엔드개발
- javascript
- frontend
- node.js
- CSS
- excel down
- react excel 다운
- 제이쿼리
- react portal
- 개발
- 로그인폼
- css3
- React.js
- 퍼블리싱
- HTML
- 프론트엔드
- Portal
- jQuery
- file-saver
- excel custom
- 디자인시스템만들기
- paging-custom
- 퍼블리셔
- npm
- 탭메뉴
- slick-slide
- 페이징 커스텀
- 슬릭 슬라이드
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |