[리액트] 공부일지-3

728x90

React-router-dom

오늘은 리액트 라우터 돔에 대해서 공부를 했다.

현재 버전은 v6까지 나왔으며, v5와 비교했을 때 바뀐 점이 꽤나 있다.

코딩애플 강의에서는 v5를 사용하고 있어서 혼란이 있었다.

 

index.js

import 어쩌구 많은곳;

import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
  <React.StrictMode>
    <BrowserRouter>
      <App/>
    </BrowserRouter>
  </React.StrictMode>
  document.getElementById('root')
);

app.js

import 많은 곳;
import { Link, Route, Switch } from 'react-router-dom';

function App(){
  return (
    <div>
      HTML 잔뜩있는 곳 
      <Route path="/"> 
        <div>메인페이지 코드</div>
      </Route>
      <Route path="/detail">
        <div>상세페이지 코드</div>
      </Route>
    </div>
  )
}

이 코드는 코딩애플에서 쓴 react-router-dom인데 v5이다. 나한테 install된 버전은 v6여서 그런지

이런식으로 코드를 짜면 빈 화면만 송출이 되었다. 그래서 v6버전에 맞춰 코드를 수정해보았지만

다른 확장프로그램들이랑 버전이 꼬였는지(?) 똑같이 빈 화면이 송출이 되어서

아예 react-router-dom을 v5로 다시 설치하였다. 그리고 다시 위의 코드로 실행을 해보니 다행히도

화면이 송출되었다.

 

위의 코드를 조금 더 간편화하기 위해 상세페이지에 있는 코드를 컴포넌트화 시켜 외부에서 불러오도록

설정해보았다.

 

detail.js

import React, {useState} from 'react';

function Detail(){
    return(
      <div className="container">
            <div className="row">
              <div className="col-md-6">
                <img src="https://codingapple1.github.io/shop/shoes1.jpg" width="100%" />
              </div>
              <div className="col-md-6 mt-4">
                <h4 className="pt-5">상품명</h4>
                <p>상품설명</p>
                <p>120000원</p>
                <button className="btn btn-danger">주문하기</button> 
              </div>
            </div>
      </div> 
    )
  }
export default Detail

detail.js라는 파일을 새로 만드어 거기에 세부사항 코드를 넣었다.

그리고 export default를 이용하여 외부에서 import할 수 있게 해주었다.

  <Route path="/detail">
    <Detail />
  </Route>

위의 코드 하나로 코드가 굉장히 줄어들었다.

앞으로 프로젝트를 하면서는 아마도 v6를 써야할 것 같아서

조만간 v6의 사용법을 제대로 이해해야겠다.

 

728x90

'JS > React' 카테고리의 다른 글

[NextJS] Cypress 테스트 코드 작성 해보기  (1) 2024.03.04
[NextJS] CSR, SSR 그리고 SSG의 차이  (0) 2024.02.27
[리액트] 공부 일지-2  (0) 2022.01.06
[리액트] 공부 일지-1  (0) 2021.12.31
[리액트] styled-component 사용법  (0) 2021.12.29

댓글