2024.07.20 프로그래머스 - React 동적 UI 개발 6
React 기반 동적 UI 개발 - 6
BookDetail Page 개발
Router 설정
App.tsx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const router = createBrowserRouter([ { path: "/", element: <Layout />, errorElement: ( <Layout> <Error /> </Layout> ), children: [ { index: true, element: <Home /> }, { path: "/books", element: <Books /> }, { path: "/books/:bookId", element: <BookDetail /> }, { path: "/login", element: <Login /> }, { path: "/signup", element: <Signup /> }, { path: "/reset", element: <ResetPassword /> }, ], }, ]);
- /books/:bookId 경로에 BookDetail 페이지를 연결 하였다.
- URL Param을 해당 페이지 컴포넌트에서 받아 들여 사용하면 된다!
useParams() : React-Router
- useParams 훅은 연결된 URL의 Parameter 값을 가져올 수 있다.
- React-Router의 내장된 훅이다.
BookDetail.tsx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
import React, { useEffect } from "react"; import { useParams } from "react-router-dom"; import styled from "styled-components"; import { useBook } from "../hooks/useBook"; function BookDetail() { // URL Parameter 사용 const { bookId } = useParams(); const { book } = useBook(bookId); // Early Return if (!book) return null; return ( <BookDetailStyle> <div>BookDetail</div> </BookDetailStyle> ); } const BookDetailStyle = styled.div``; export default BookDetail;
dl, dt, dd 태그
- MDN
dl 태그
설명 목록
을 나타내는 태그- dt 로 표기한 용어와 , dd 로 표기한 설명 그룹 목록을 감싸서 설명 목록을 생성한다.
dt 태그
- 용어 정의
dd 태그
- 설명 그룹
해당 마크업을 사용할 떄 주의 할점
- 블로그 글
- dt 와 dd 가 1:1 로 쌍을 이룰 때 사용하는 것이 가장 정확한 사용법이다
스크린 리더
를 사용하는 사용자들은 해당 정보가 정확히 어떤 정보인지 파악하기 힘들다.
- ul 이나 ol 과 같이 병렬적인 아이템을 배치하는 용도로 사용해서는 안된다.
CSS : -webkit
강의에서 아래의 CSS 코드를 사용하였는데, 해당 스타일을 처음봐서
정리 한다.
1
2
3
display : -webkit-box;
-webkit-line-clamp : 4;
-webkit-box-orient: vertical;
해당 CSS 속성들은 Text를 자르는 용도로 사용된다.
특정 줄 만큼만 텍스트를 표시하고자 할 때 사용하면 된다.
display : -webkit-box;
- flexible box layout을 적용하기 위한 선언이다.
-webkit-line-clamp
프로퍼티를 필수로 같이 사용해야 한다.- 해당 프로퍼티를 사용하는 엘리먼트의 Text가 값으로 입력된 줄 수를 넘어가면
...
으로 이어서 표시된다.- 이하 부분은 생략된다는 점
-webkit-line-clamp
- -webkit-box 로 설정된 레이아웃의 주축 방향을 설정 한다.
- Webkit 기반 브라우저에서 지원된다 (Chrome, safari)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.