: react-router-dom을 이용해 홈 페이지에서 도감 페이지로 이동, 도감 페이지에서 상세 페이지로 이동
: 반드시 Dashboard, PokemonList, PokemonCard로 컴포넌트를 구분하여 페이지를 구성
queryString을 사용하여 포켓몬 ID를 받아 해당 포켓몬의 상세 정보 표시: 조건부 스타일링을 시도해보려 했으나 못 함.
1) `contextAPI` 브랜치 생성하여 contextAPI 사용해보기
1) `redux` 브랜치 생성하여 contextAPI 사용했던 것 지우고, 일반 redux로 고쳐보기
2) `RTK` 브랜치 생성하여 redux toolkit 사용해보기
: 포켓몬 디테일 페이지에 '추가' 버튼을 만들어, 해당 버튼을 눌렀을 때 대시보드에 포켓몬이 추가되도록 구현
: 브라우저 스토리지 사용, react-router-dom 의 심화사용 등 여러가지 방법을 사용하여 디테일 페이지에서 리스트 페이지로 돌아가면 기존에 선택했던 포켓몬들이 사라지는 것을 유지시키기
: alert 대신 Modal 또는 toast와 같은 UI 요소를 사용하여 피드백을 제공하세요. 다양한 리액트 라이브러리를 사용해 보기
예시1 - npm: react-toastify
예시2 - sweetalert2
예시3 - sonner
1. Props drilling이란 무엇인가요?
상위 컴포넌트에서 사용하는 state나 함수 등 프로퍼티를 하위 컴포넌트에서도 사용해야할 때, 하위로 props를 전달한다고 합니다. 컴포넌트간의 계층이 많을 때, 중간단계에도 전달해줘야하며 계속해서 하위 컴포넌트로 필요한 props를 전달하는 것입니다.
2. Context API를 사용하여 props drilling을 어떻게 해결할 수 있었나요?
1. createContext로 contextAPI 변수명을 지정 및 생성 2. Provider로 감싸주고 안에 필요한 value값을 입력 3. 필요한 하위 컴포넌트에서 useContext를 이용하여 필요한 프로퍼티를 가져와서 사용
3. 이 과제에서 컴포넌트 구조를 어떻게 구성했나요? 그 이유는 무엇인가요?
Main - App - Router - Home - Dex(Dashboard / PokemonList - PokemonCard) - Detail
: 크게 페이지를 Home, Dex, Detail 세가지로 분류했으며, 각 페이지에 필요한 구성을 컴포넌트로 분리했기 때문이다.
(Dex 페이지에서 Dashboard와 PokemonList로 나뉘고, 이 두 컴포넌트는 PokemonCard 컴포넌트를 이용하여 카드를 펼쳐줬다.)
4. 컴포넌트 분리가 코드의 가독성과 재사용성에 어떤 이점을 제공했나요?
코드가 길어지면 스크롤을 내려 위, 아래로 이동을 많이 하게 되는데 분리를 하게 되면 이러한 비효율이 줄어들어 가독성이 좋아지고, props를 전달하거나 contextAPI를 통해 프로퍼티를 전달해줌으로써 필요한 state나 함수 등을 재사용하기 쉬워졌습니다.
잘 보고 갑니다
눈이 침침 한테 폰트가 커서 좋읍니다