
이번 주 학습 주제는 크게 두 가지 였습니다.
완전히 새로운 개념을 배운 주차는 아니었습니다.
하지만 React Native에서 Navigation을 구현할 때 어떤 방식이 있는지, 그리고 이를 사용하기 위해 어떤 서드파티 라이브러리들이 필요한지 전체적으로 훑어보았다는 점에서 의미가 있었습니다.
개발을 하면서 느끼는 건,
기능 구현 속도 자체보다 문제 해결 능력과 해결 속도에서 실력 차이가 난다는 것입니다.
이 강의 파트는 새로운 개념을 배우기보다는,
디버깅 기본기를 다시 점검하는 시간에 가까웠습니다.
의외로 가장 많이 발생하는 문제입니다.
초기 프로젝트 세팅 단계에서 alias 설정과 ESLint 규칙을 잘 정의해두면
위와 같은 실수는 웬만하면 방지할 수 있습니다.
다만 리팩토링 과정에서 파일 경로가 변경되었는데 import를 수정하지 못한 경우,
또는 불필요한 import가 남아있는 경우 빌드 오류로 이어질 수 있습니다.
현재는 배포 전 빌드 체크를 통해 사전 검증하는 방식으로 관리하고 있어,
이와 같은 이슈는 자주 발생하지 않습니다.
Maximum update depth exceeded
무한 루프가 발생했을 때 나타나는 대표적인 에러입니다.
대표적인 원인
1. useEffect 안에서 setState 호출
2. dependency 배열에 해당 state가 포함되어 있음
state 변경 -> 재랜더 -> useEffect 재실행 -> 무한 반복
- dependency 배열이 정확한가?
- 불필요한 값이 포함되어 있지는 않은가?
- 콜백을 useCallback으로 감싸야 하는 상황은 아닌가?
Unable to resolve module
존재하지 않는 라이브러리를 import 했을 때 발생하는 에러입니다.
Each child in a list should have a unique key prop
배열을 순회하며 렌더링할 때 key prop을 지정하지 않으면 발생하는 경고입니다.
최근 테이블 페이지네이션을 구현하면서 실제로 겪은 이슈가 있었습니다.
row마다 id값을 index 기준으로 설정했는데,
페이지를 뒤로 갔다가 다시 앞으로 돌아올 때
마지막에 있어야 할 요소가 맨 위로 올라오는 현상이 발생했습니다.
원인은 다음과 같았습니다:
해결 방법은 index와 현재 페이지 번호를 조합하여 고유한 key를 생성하는 것이었습니다.
이 경험을 통해 느낀 점은 index를 key로 사용하는 것은 최후의 수단이어야 한다는 것 입니다.
가능하다면 항상 고유 식별자(id)를 사용하는 것이 안전합니다.
논리적 오류는 터미널에 에러로 표시되지 않습니다.
코드는 문법적으로 맞습니다.
하지만 기대한 결과가 나오지 않습니다.
이 경우를 논리적 오류라고 볼 수 있습니다.
이제 본격적으로 Navigation 세팅을 진행했습니다.
React Native에서 화면 전환은 거의 필수이고,
사실상 표준 라이브러리는 React Navigation인 것 같습니다.
설치는 공식 문서를 참고하여 진행했습니다.
Stack Navigation은 페이지를 위로 차곡차곡 쌓는 구조입니다.
기본적으로는
동작을 지원하고, 새로운 화면을 push하면 스택의 맨 위에 배치 됩니다.
Tip: navigation 폴더를 분리하여
routes.ts파일에 라우트 경로를 상수로 관리하면 유지보수가 수월합니다.
Drawer Navigator는 좌측에서 슬라이드되는 메뉴를 제공합니다.
에 주로 사용됩니다.
Material Top Tabs Navigator는 상단 탭 형태의 네비게이션입니다.
에서 주로 사용됩니다.
Bottom Tabs Navigator는 하단 탭 형태의 네비게이션입니다.
이번 주차는 난이도 자체는 높지 않았습니다.
React 경험이 있다면 충분히 알고 있는 내용입니다.
하지만 앱 개발에서는 화면이 많아질수록 구조 설계 능력이 중요해집니다.
이 부분이 단순 구현 능력보다 더 중요해진다고 생각합니다.
다음 단계는 배포 과정을 진행하려고 합니다.