지난 시간에 이어 프로젝트를 진행하겠습니다. 오늘은 도서 상세 페이지를 구현해 보겠습니다.
📖Book Store 프로젝트
도서 상세 페이지 화면은 상품의 상세 내용 보여주기, 좋아요 기능, 장바구니 추가 기능을 구현해야 합니다.
📄상세 내용 보여주기
상세 내용은 단순하게 서버에서 받아온 정보를 화면에 그려주는 것입니다. 이때 중요한 포인트는 디자인과 같은 화면으로 나타내는 것도 나타내는 것이지만 포맷을 재사용이 가능하도록 분리해 주는 작업입니다.
🍯tip! 날짜 포맷 함수를 직접 만들어도 좋지만, 기존에 있는 라이브러리 dayjs를 사용해 보면 좋습니다. 날짜 포맷부터 다양한 유틸리티 함수를 제공합니다.
📄좋아요 기능
좋아요 기능은 쉽게 생각되는 일반적인 좋아요 기능과 동일한 기능입니다. 해당 기능을 구현하는 방법은 두 가지로 나뉠 수 있습니다.
서버에게 요청하고 응답받은 것으로 화면을 그려주는 것
서버에게 요청하면서 응답을 예상해서 화면에 그려주는 것
서버가 응답이 아주 빠르다면 1번 방법으로 구현해도 큰 문제는 없을 것입니다. 하지만 그렇게 되면 사용자 경험(UX)적인 측면에서 불편해질 수 있습니다. 해당 측면을 고려해서 2번 방법으로 구현해 보겠습니다.
📑낙관적 업데이트(Optimistic Updates)
앞서 말한 2번 방법을 낙관적 업데이트라고 부르고, 이는 단순한 결과를 당연히 성공할 것이라고 생각해서 결과를 미리 보여주는 것을 말합니다. 이름을 보면 어느 정도 예상을 할 수 있듯이 낙관적 업데이트는 좋아요, 장바구니 추가와 같은 즉각적으로 반응되면 좋은 곳에 사용할 수 있습니다.
🍯tip!컴포넌트 분리. 컴포넌트 분리는 고민이 많이 되는 부분입니다. 쉽게 구분하는 방법은 중복되는 렌더링 부분(중복되는 tsx 코드)을 컴포넌트로 작성하는 것이다. 컴포넌트로 만들고 나서는 다양한 곳에서 사용할 수 있도록 외부에서 컨트롤할 수 있도록 만들어주는 것 또한 중요하다.
Q. 로그인을 한 후에 새로고침을 하지 않으면 로그인을 하지 않은 상태로 유지가 되는데 왜 그런 것인가? 어떻게 해야 하는가?
A.
Q. Styled Components를 사용하고 있는데 스타일을 작성할 때 vscode-styled-components extension을 통해 스타일은 편하게 작성하고 있다. 하지만 내부에서 js를 활용하는 부분에서 보조가 부족한데 이를 도와주는 extension은 없는가?