State Hooks
const [item, setItems] = useState([]);
여기서 item
은 state 변경 이전의 값으로 고정된다. 따라서 비동기와 관련된 고민을하지 않아도 된다!
useState의 인자를 전달하여 초기값을 설정할 수 있다. useState(1) → item === 1;
useState의 두 번째 요소에 값을 전달하는 것이 일반적인 사용 방식인데, 함수도 쓸 수 있다.
import React, { useState } from "react";
const Example = () => {
const [count, setCount] = useState(0);
return (
<div>
<p> 클릭한 횟수: {count} 번 </p>
<button onClick={() => setCount(count + 1)}></button>
</div>
);
};
export default Example;
Effect Hooks
const { language } = props
const [checked, setChecked] = React.useState(false);
React.useEffect(() => {
fetch(`https://ur8ist29gg.execute-api.us-east-1.amazonaws.com/dev/youtube-data?q=${checked}`)
.then(data => data.json())
.then(data => {
setItems(data.items)
})
}, [language])
// }, []) // 1. 두 번째 인자 배열 요소가 없으면(빈배열이면) componentDidMount처럼 mount시 1회만 작동
// }) // 1-1. 두 번째 인자 없으면 rerender가 필요할 때 마다 작동합니다.
// }, [language]) // 2. 배열의 요소가 변경이 되면, useEffect의 첫 번째 인자 callback이 실행됩니다.
useEffect
메서드는 클래스 컴포넌트의 라이프사이클메서드르 대신한다.cDM
과 cDU
를 합친것과 같은데,
우선 컴포넌트 렌더시 1회 호출되며 (cDM
)
이후, 두번째 인자 배열요소가 변화하면 다시 호출된다.(cDU
)
이때, 두번째 인자배열요소에는 state,props가 들어가는 것이 일반적이다.
두번째 인자배열요소 외의 다른인자의 변화에는 렌더링하지 않으므로,
개발자가 렌더링을 컨트롤 할 수 있다는 점이 가장큰 장점이다.
이외
useReducer
- 특정 조건에 작동되게 하는 useState
useCallback
useMemo
- 계산이 많이 필요한 작업의 경우, 미리 결과값을 메모리에 저장해놓는 기법을 useState에 적용한 것이다.
'개인공부 > TIL(Today I Learned)' 카테고리의 다른 글
TIL 74일차_React Router : withRouter (0) | 2021.04.02 |
---|---|
TIL 73일차_React Router (0) | 2021.04.01 |
TIL 71일차_ Why React Hook? (0) | 2021.03.30 |
TIL 70일차_리액트: fetch로 받아온 데이터 주의점 (0) | 2021.03.29 |
TIL 69일차_RESTful API (0) | 2021.03.28 |