IT'S DO
728x90

React Routes는 리액트 기반의 웹 애플리케이션에서 클라이언트 측 라우팅을 관리하기 위한 네비게이션 라이브러리로써

해당 URL에 맵핑을 시키기 위해서 사용한다.

 

## 문제

그러면 보통, 게시글 같은 리스트의 id값을 리스트로 뿌려주게끔 만들었다. 그것을 route로 받고 싶으면 어떻게 할까?

<div className="card-grid">
  {cards.map((card, index) => (
    <Link to={`/card/${card.id}`} key={index} className="card-link">
      <div className="card">
        {card.images?.map((img, i) => (
          <img key={i} src={img.fileUrl} alt={card.title} className="card-image" />
        ))}
        <div className="card-details">
          <h4>{card.title}</h4>
          <p>{card.address}</p>
          <p>{card.hours}</p>
        </div>
      </div>
    </Link>
  ))}

위와 같이 React js파일에서 리스트에 cards에 배열 값을 담아서 각각의 리스트에 card.id의 값을 뿌리게 해주고, 그것을 링크로 가게끔 구현했다. 물론 /card/{cardId}의 백엔드 부분은 구현되어 있다.

 

app.js에서

import { BrowserRouter as Router, Routes, Route, Link } from 'react-router-dom';
<Routes>
  <Route path="/card/:cardId" element={<CardPage />} /> {/* 카드 상세 페이지 추가 */}
</Routes>

위와 같이 백엔드의 api를 받을 수 있게 즉 react에서 리스트의 각각의 cardId값을 받은 것을 클릭하면 해당 CardPage로 

원하는 것처럼 리스트마다 백엔드에서 담은 데이터 값으로 해당 페이지를 이동할 수 있게 된다.

 

그렇게 하면 CardPage안에서는 useParam을 사용하여 해당 변수에 cardId를 담을 수 있다.

import { useParams } from "react-router-dom";

function CardPage() {
  const { cardId } = useParams(); // URL의 cardId 파라미터 값을 가져옴

  return (
    <div>
      <h1>Card ID: {cardId}</h1>
      {/* cardId를 이용해 카드 상세 정보를 렌더링 */}
    </div>
  );
}

 

 

# 문법 설명

1. cards.map((card, index) => ( ... ))

cards.map은 cards 배열의 각 요소(card)를 순회하면서 새로운 요소로 변환하는 메서드

  • card는 cards 배열의 각 요소를 의미하고, index는 배열의 현재 요소 인덱스 번호를 제공
  • (card, index) => ( ... )는 화살표 함수로, map 메서드가 순회하는 각 요소를 처리하는 함수를 정의
    이 함수는 JSX를 반환하는데, Link 태그 안에 각 카드의 내용을 렌더링

2. <Link to={/card/${card.id}} key={index} className="card-link">

React Router에서 제공하는 <Link> 컴포넌트로, 클릭 시 지정한 to 경로로 이동함.

  • to={/card/${card.id}}: 템플릿 리터럴 문법으로 card.id를 포함하는 문자열을 동적으로 생성해. 예를 들어, card.id가 123이면 to="/card/123"와 같은 경로가 되고.
  • key={index}: 리액트는 배열의 각 요소가 고유해야 렌더링 성능을 최적화할 수 있어. key 속성은 각 요소에 고유 식별자를 부여해서 리렌더링을 효율적으로 만들어. 여기서는 index를 사용하고 있음.

3. {card.images?.map((img, i) => ( ... ))}

여기서 card.images 배열이 있을 때만 .map을 사용하도록 ? 연산자를 사용해, Optional Chaining 문법이다.

  • map 메서드는 card.images 배열의 각 img 요소에 대해 JSX 코드를 반복 생성함.
  • (img, i) => ( ... ): img는 각 이미지 요소이고, i는 인덱스 값.

4. <img key={i} src={img.fileUrl} alt={card.title} className="card-image" />

이 부분은 각 이미지(img)에 대한 img 태그를 생성.

  • key={i}: 각 img 태그에 고유한 key를 부여하기 위해 i를 사용.
  • src={img.fileUrl}: img 객체의 fileUrl 속성을 src 속성에 할당해서 이미지 경로를 설정.
  • alt={card.title}: card.title을 alt 텍스트로 넣어, 이미지를 설명하도록 설정.
  • className="card-image": 이미지 스타일링을 위한 클래스.

'개발 > React' 카테고리의 다른 글

[React] spring + react router, kakao login 프로세스 및 구현  (0) 2024.11.04
[springboot + react] 연동  (0) 2024.10.30
React가 나오게 된 이유  (0) 2022.11.08
profile

IT'S DO

@멋진놈

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!