[32] 리액트 라우터 v6

반응형

현재 진행하고있는 프로젝트 에 라우트 적용해보기

현재 redux 를 사용하고있는 todo 프로젝트에 라우터를 적용하여

todo를 클릭했을때 ? 상세 페이지를 띄우게 만들어보자.

이과정을 하게되면서 문제를 해결하는 과정도 기록해보자.

1. 프로젝트에 라우터 라이브러리 설치

$ npm install react-router-dom

2. 프로젝트 라우터 적용

루트 디렉토리에 index.js 파일에 react-router-dom 내장 컴포넌트 BrowerRouter 컴포넌트를 사용하여 감싸준다.

이 컴포넌트는 간단하게 HTML5 의 History API 를 사용해 주소경로에 관련된 정보를 리액트 컴포넌트에서 사용할수있도록 해준게하는 컴포넌트 이다.

사용해보면서 이해해보자

index.js

import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import reportWebVitals from "./reportWebVitals";
import { legacy_createStore as createStore } from "redux";
import rootReducer from "./redux/modules";
import { Provider } from "react-redux";
import { composeWithDevTools } from "redux-devtools-extension";
import { BrowserRouter } from "react-router-dom";

// 스토어 생성
// composeWithDevTools 를 사용하여 리덕스 개발자 도구 활성화
const store = createStore(rootReducer, composeWithDevTools());

// createStore 취소선이 그어지는 이유
// https://velog.io/@xmun74/Q-createStore-%EC%B7%A8%EC%86%8C%EC%84%A0-%EC%99%9C-%EA%B7%B8%EC%96%B4%EC%A7%80%EB%82%98
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <Provider store={store}>
        <App />
      </Provider>
    </BrowserRouter>
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

3. 페이지 컴포넌트 생성

리액트 라우터를 통해서 연결된 페이지 생성하기이다.

필자는 현재 컴포넌트들을 미리 만들어놓은상태이기에 패스한다.

4. Route 컴포넌트로 특정경로에 원하는 컴포넌트 보여주기

<Routes> 컴포넌트 로 감싸줘도되고 안써도되지만 라우트 를 구분짓기위해 써준다.

<Route path="주소규칙" element={보여 줄 컴포넌트 JSX} /> 양식을 갖는 컴포넌트를 사용해서 라우트 설정할수있다.

현재 나의 프로젝트에서는 app.js 에서 <CreateTodoContainer /> <TodosContainer /> 두개를 사용중이였다 . 이를 pages/Home.js 에서 묶고 그 Home.js 컴포넌트를 route 설정하였다.

app.js

**import { Route, Routes } from "react-router-dom";**
import { Home } from "./pages/Home";

function App() {
  return (
    <>
      **<Routes>
        <Route path="/" element={<Home />} />
      </Routes>**
    </>
  );
}

export default App;

5. Link 컴포넌트를통해 다른페이지 이동

웹페이지에서는 보통 a 태그를 사용한다 . 다만 리액트 라우터를 사용하는 프로젝트에서는 바로 사용하면안된다.

a 태그를 통해 클릭하게되면 페이지 를 이동할때 브라우저에서는 페이지를 새로 불러오기때문이다.

Link 컴포넌트 또한 a 태그를 사용하긴 하지만 페이지를 새로 불러오는 것을 막고 History API 를 통해 브라우저 주소의 경로만 바꾸는 기능이 내장되있다.

Link 컴포넌트사용방법이다.

<Link to="경로">링크 이름</Link>

반응형

'프론트엔드 > React' 카테고리의 다른 글

[35] 리액트 React.memo  (1) 2022.12.21
[33] 리액트 라우터 추가 정리  (0) 2022.12.19
[31] 리액트 리덕스 #2  (0) 2022.12.15
[30] 리액트 리덕스 # 1  (0) 2022.12.13
[29] 리액트 useEffect  (0) 2022.12.09