함수형 컴포넌트
export const Component = () => { ... return(<></>)}
클래스형 컴포넌트
class
내에 render()
를 통해 정의 후, React element 반환Component의 이름은 언제나 대문자로 시작해야한다.
마운트 → 업데이트 → 언마운트
마운트 : Component의 생성 시점
constructor
→ getDerivedStateFromProps
→ render
→ componentDidMount
업데이트 : Component 업데이트 시점
getDerivedStateFromProps
→ shouldComponentUpdate
→ render
→ getSnapshotBeforeUpdate
→ componentDidUpdate
언마운트 : Component가 화면에서 사라지는 시점
componentWillUnmount
호출state
가 JS의 클로저를 이용해 구현되었기 때문이다.useEffect
: 비동기적 작동, Network 요청이나 DOM 접근, 비동기 작업에 사용useLayoutEffect
: 동기적 작동, 성능 모니터링, 애니메이션 구현 등state
는 Component가 정보를 기억하는 방식(기능)
useState
, useReducer
를 통해 state
를 추가한다.state
는 배열을 통해 관리되며, 배열의 인덱스와 state
의 값을 클로저 내에 관리한다.
useState()
함수 반환 후에도 별도의 메모리 공간에 값 저장setter
함수를 props
로 전달※ Props Drilling 과 해결방안? ✔️
props
를 트리 깊숙이 지속적으로 전달하는 과정을 의미ContextAPI
, Redux
등을 통해 해결할 수 있다.key
란 어떤 항목을 추가, 변경, 삭제할 지 식별하는 지 도움state
값의 변화는 리렌더링을 초래한다.
setState
를 통해서 state
의 주소 변경을 해야만 React가 반응해 리렌더링 과정을 거칠 수 있다.
추가적으로 setState
는 비동기적으로 동작하나 비동기 함수는 아니다.
setState
사용, state
가 객체인 경우, ...
spread 연산자를 이용해 깊은 복사를 진행해 상태를 업데이트 해야한다.HTML
은 전달할 함수를 문자열의 형태로 전달
onclick
처럼 소문자로false
반환 식으로 이벤트의 기본동작을 방지React
는 함수 그 자체로 핸들러를 전달
onClick
처럼 camelCase로preventDefault
를 명시적으로 호출해 이벤트의 기본동작을 방지해야 함input
에 focus
를 두거나, 스크롤 이벤트 등의 DOM 조작Portal
은 오직 DOM노드의 물리적 배치만 변경Memoization : 계산된 값을 다시 계산하지 않게 자료구조에 저장해 다시 사용하는 것.
퍼포먼스 최적화를 위해 주로 사용된다.
useMemo
: deps 배열의 요소의 변경이 없는 한, 함수의 반환값을 새로 계산하지 않기 위해
useCallback
: deps 배열의 요소가 변경이 없는 한, 함수를 새로 생성하지 않기 위해
state
, props
의 변경은 리렌더링을 초래하므로 이를 최소화map()
을 통해 컴포넌트 렌더 시, key
값으로 index
를 사용하지 않는 방법 ✔️useMemo
, useCallback
등의 사용으로 불필요한 렌더링의 발생 빈도를 낮춘다.JS 상태관리 라이브러리로 모든 상태의 업데이트를 action
으로 정의.
action
정보를 기반해 reducer
에서 상태를 업데이트
상태 예측이 쉬워지며 유지보수에 용이하다.
Redux-thunk
를 통해 비동기 작업을 처리할 수 있다.
프로젝트에 왜 Redux를 도입했는지? ✔️
Recoil
을 접해보지 않은 상태에서 프로젝트를 진행했기 때문에 전환 시기를 놓쳤다.React Component내부에서 간단하고 직관적으로 API를 사용할 수 있는 원격 및 비동기 데이터를 관리하기 위한 라이브러리
GET
Method에는 useQuery
, POST
Method에는 useMutation
이 사용된다.
queryKey
: 쿼리를 식별하고 캐시하기 위해 사용
fetchData 함수
: Data를 가져오는 로직 수행
data
, isLoading
, error
의 속성 반환
장점
enabled
를 통한 동기적 실행Redux
와 달리 React에 최적화된 상태관리 라이브러리Redux
의 복잡함을 감소시켜 사용하기에 편하다.Recoil
은 Hooks 기반 사용으로 배우기 편하고 사용이 쉽다.Atoms
: 컴포넌트가 구독할 수 있는 Recoil
상태의 단위atom(key, default)
Selector
: atom
혹은 다른 selector
상태를 입력 받아 동적인 데이터를 반환하는 함수