일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 키다리 개발자
- scope
- Element
- 노드
- web
- ecma
- react
- props
- React.js
- wep
- React calculator
- html
- includes
- jsx
- ES6
- Node.js
- DoM
- javascript
- tag
- CSS
- closure
- 볶음밥
- 키다리 개발 일지
- vue.js
- 회고록
- map
- component
- 키다리의 개발일지
- Rendering
- 시맨틱
- Today
- Total
키다리 개발자
React Hooks (useState, useEffect) 본문
상태 State 개념과 React Hooks를 소개하고, useState와 useEffect를 작성하는 방법을 알아보겠습니다.
State
React에서 핵심 개념 2가지 중 하나인 State 상태 개념은 컴포넌트 자체적으로 보유하고 있는 데이터입니다.
또 다른 하나인 props는 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달하는 방식입니다.
React Hooks
Hooks는 리액트 v16.8에 새로 도입된 기능으로 함수형 컴포넌트에서도 상태 관리를 할 수 있는 useState,
랜더링 직후 작업을 설정하는 useEffect 등의 기능을 제공하여 다양한 작업을 할 수 있게 해 줍니다.
React가 지원하는 함수 중 use로 시작하는 것으로 통칭한 명칭입니다.
- useState
- useEffect
useState는 코드 상단에서 import 구문을 통해 불러오고, 다음과 같이 사용합니다.
const [value, setValue] = useSatate(0);
useState() 함수의 파라미터에는 상태의 기본값을 넣어 줍니다.
현재 0을 넣어 주었는데, 카운터의 기본값을 0으로 설정하겠다는 의미입니다.
이때 함수가 호출되면 배열을 반환하게 되는데,
- 첫 번째 인자의 값인 value는 상태 값(변수)
- 두 번째 인자의 값은 상태를 설정하는 함수입니다.
따라서 이 useState 함수에 파라미터를 넣어 호출하면 전달받은
파라미터 값이 바뀌고 컴포넌트가 정상적으로 리렌더링됩니다.
useState 여러 번 사용하기
하나의 useState 함수는 하나의 상태 값만 관리할 수 있습니다.
컴포넌트에서 관리해야 할 상태가 여러 개라면 useState를 여러 번 사용하면 됩니다.
useEffect
useEffect는 리액트 컴포넌트가 렌더링 될 때마다 특정 작업을 수행하도록 설정할 수 있는 Hook입니다.
클래스형 컴포넌트의 componentDidMount와 componentDidUpdate를 합친 형태로 보아도 무방합니다.
useEffect 또한 코드 상단에서 import 구문을 통해 불러오고, 다음과 같이 사용합니다.
useEffect는 해당 컴포넌트의 연산이 끝난 이후 함수를 실행합니다.
즉, 화면에 렌더링 후 useEffect 함수가 수행한다고 할 수 있습니다.
사진상, useEffect에 title이 바뀌도록 함수를 수행하도록 하였습니다.
조금 뒤늦게 title도 따라 바뀝니다.
이 부분이 바로 '해당 컴포넌트의 연산이 끝난 이후 함수를 실행한다'는 의미입니다.
마지막으로 React Hooks는 함수형 컴포넌트에서만 사용이 가능합니다.
'React.js' 카테고리의 다른 글
React Router (SPA, Route, Link) (0) | 2020.01.23 |
---|---|
CSS Module (React 컴포넌트 스타일링) (1) | 2020.01.15 |
React 클래스 컴포넌트와 함수형 컴포넌트의 차이점 (0) | 2020.01.09 |
React.js 계산기 만들기(state, props, map) (0) | 2019.12.03 |
React 리액트란? (0) | 2019.11.28 |