언제 Redux를 쓸까
Redux가 필요할 때
1. Redux 방식이 편하고 좋다고 생각할 때
2. 비동기 작업에 대해 많은 컨트롤이 필요할 때(단순 fetch는 react-query 등 사용 가능)
3. next.js를 사용하지 않고 서버사이드 렌더링을 해야할 때
4. Testing을 해야할 때
5. 컴포넌트가 아닌 곳에서 global state를 사용하거나 업데이트 해야할 때
...
Redux 대체제
Context API
- context를 수단으로 useState / useReducer를 사용하여 global state 관리
- 성능 최적화가 이뤄지지 않았음. 특정 컴포넌트가 사용하지 않는 global state가 업데이트 되어도 리렌더링 발생
(redux는 최적화가 되어 있음)
- 위의 이유 때문에 관심사 분리가 매우 중요
- 따라서 global state가 다양해지는 경우, Context의 사용은 적합하지 않을 수 있음
Constate
- 위와 같은 Context API의 한계를 보완한 Library
- Context를 기반으로 작동하기에 Context API에서 추가로 배울 것이 따로 없음
Recoil
- Context API의 한계를 극복하고자 facebook에서 만든 전역상태 관리 Lib
- 현재 experimental 단계이지만 현업에서도 사용 가능
Selector는 아래와 같은 상황에 유용
1. state의 데이터 구조가 변경될 때
2. 컴포넌트 리렌더링 최적화를 할 때
Presentational & Container 컴포넌트는 이제 그만!
대신, 공통된 로직은 Custom Hook을 만들어 상태 관련 로직과 view를 분리하자!
간단한 API 요청은 react-query
- redux-saga 등을 쓰면 요청 시작 / 성공 / 실패에 대한 3가지 액션과 각 액션을 처리하는 로직을 따로 직접 관리해줘야 함
- 하지만 react-query를 쓰면 간단히 처리할 수 있음
그럼에도, 아래와 같은 상황에서는 redux middleware(redux-saga 등)가 필요하다
1. 요청을 연달아 여러번 했을 때, 이전 요청은 무시하고 맨 마지막 요청만 처리하도록 할 때
2. 특정 조건이 만족됐을 때 이전에 시작한 요청을 취소하는 상황
3. 특정 콜백함수를 원하는 액션이 디스패치 됐을 때 호출하도록 등록하는 상황
4. 컴포넌트 밖에서 어떤 작업을 수행할 때
테스트 코드 작성을 잘 하자
느낀 점
- 나중에 recoil 등이 더 발전하면 굳이 redux를 안써도 될 때가 오겠다
- selector를 적극 사용하자
- custom hook을 만들어 적용해보자
- react-query도 간단한 요청에는 사용해봐야겠다
- 현재 내가 수정한 부분이 자잘한 에러를 일으켜 골치아픈데, 테스트 코드 도입으로 해결 가능한지 검토해봐야겠다
'TIL(Today I Learned) > 2021년' 카테고리의 다른 글
11.19 - 리디북스에서 React 사용법 (0) | 2021.11.19 |
---|---|
11월 15일 - Unit testing의 필요성 (0) | 2021.11.15 |
10.20 오늘의 개발자: 프론트엔드 4주차: 개발자 생애주기에 맞는 준비 (0) | 2021.10.20 |
10. 19 - !! 한재엽님 포스트를 읽고.. !! (0) | 2021.10.20 |
10.18 - 모든 개발에는 이유와 목적이 있어야 한다 (0) | 2021.10.18 |