sparta TIL

24.05.30 TIL Router DOM1,2,3

hr7 2024. 5. 26. 15:24

[ React Router DOM 1 - 소개 및 hooks ] 

react-router-dom이란?

페이지간 이동을 구현할 수 있게 해주는 패키지

// 설치
yarn add react-router-dom

 

src - pages폴더 하위에 jsx파일생성

 

 

 

 

 

 

 

src - shared폴더 - Router.jsx 파일

 

 

 

 

1. 각 페이지 Route 설정 끝 !
2. App에 연결 - 이제 웹에서 4페이지 모두 이동가능 ( import할때 경로 맞는걸로 잘 불러오기 )

 

[ react-router-dom hooks ]

1. useNavigate

이벤트 핸들러에 코드를 작성하면 버튼을 클릭했을 때 우리가 보내고자 하는 path로 페이지를 이동한다. 꼭 버튼이 아니더라도 컴포넌트의 클릭 이벤트 핸들러를 통해서 활용할 수 있다. (A-B로 페이지 이동)

useNavigate Hook으로 페이지 이동 !

 

2. useLocation

현재 위치하고 있는 페이지의 여러가지 정보를 추가적으로 얻을 수 있는 Hook. 이 정보들을 이용해 페이지 안 조건부 렌더링에 사용하는 등, 여러가지 용도로 활용할 수 있다.

useLocation정보 콘솔 찍어보기 - 객체로 정보가 들어온다
useLocation정보 넣어보기

 

3. Link

Hook아님, html 태그 중 a 태그의 기능을 대체하는 API . 

JSX에서 a 태그를 사용하면 페이지를 이동하면서 브라우저가 새로고침(refresh)되기 때문에 반드시 Link로 구현해야 한다.

( 브라우저가 새로고침 되면 모든 컴포넌트가 다시 렌더링되야 하고, 리덕스나 useState 통해 메모리상에 구축해놓은 모든 상태값이 초기화 된다. 이것은 성능에 악역향을 있고 불필요한 움직임이다. )

a태그 요소로 인식되고, 클릭하면 페이지 잘 이동함

 

4. children

어떤 컴포넌트들은 어떤 자식 엘리먼트가 들어올지 미리 예상할 수 없는 경우가 있다. 범용적인 ‘박스’ 역할을 하는 Sidebar 혹은 Dialog와 같은 컴포넌트에서 특히 자주 볼 수 있습니다. ? ( Sidebar나 Nav나 Footer같은 페이지 변경해도 고정으로 유지될 컴포넌트 = Layout에 사용 )

 

결론 : Layout컴포넌트를 만들어서 Louter에 공통 레이아웃을 넣는다 !!

각 페이지마다 이동해도 헤더랑 푸터가 고정으로 유지되어있게 됨


[ React Router DOM 2 - Dynamic Route, useParams, 중첩된 라우트(Outlet) ]

 

Dynamic Route란?

'동적 라우팅'이라고 하기도 함,  path에 유동적인 값을 넣어서 특정 페이지로 이동하게끔 구현하는 방법

<Route path="/works" element={<Works />} />

예를들어 path는 같은데 페이지를 좀 더 나누고싶을때 : /works/freelance , /works/part-time , /works/full-time

근데, 저 id값은 링크 works/여기에 입력한 값이 됨 .?읭 ? = 어떤 값을 넣어도 Works페이지로 간다.

 

Works.jsx 재구성 

// Works.jsx
import { Link, useParams } from "react-router-dom";

const Works = () => {
  const params = useParams();

  const data = [
    { id: 1, todo: "react 배우기" },
    { id: 2, todo: "js 배우기" },
    { id: 3, todo: "next.js 배우기" },
    { id: 4, todo: "git 배우기" },
    { id: 5, todo: " 배우기" },
    { id: 6, todo: "ts 배우기" },
  ];

  const targetWork = data.find(function (work) {
    return work.id === Number(params.id);
  });

  return (
    <div>
      <h3>현재페이지는{targetWork.todo}입니다.</h3>
      {data.map((work) => {
        return (
          <div key={work.id}>
            <div>할일: {work.id}</div>
            <Link to={`/works/${work.id}`}>
              <span style={{ cursor: "pointer" }}>➡️ Go to: {work.todo}</span>
            </Link>
          </div>
        );
      })}
    </div>
  );
};

export default Works;

 

클릭하는 todo내용으로 바뀜

 

 

 

 

 

 

 

 

 


[ 중첩된 라우트(Outlet) ]

중첩라우팅의 개념

특정 라우트 내에서 추가적인 라우트를 정의하는 방식으로 웹 애플리케이션에서 여러 계층의 UI를 구성할 때 유용하게 사용되며 사용자 대시보드에 여러 섹션이 있는 경우 각 섹션 별로 다른 경로를 설정할 수 있다.

 

파일추가 + Mypage.jsx 도

 

📌 넣고 싶은(렌더링할)Route인 Mypaga가 보이려면 반드시 상위 Route안에 <Outlet/>을 넣어줘야한다.

     

⭐️ Layout을 이용한 페이지 이동은 전체페이지가 렌더링 되고, Outlet상위 Route컴포넌트는 유지 되면서 Outlet부분만 렌더링되어 바뀐다.

 

// Router.jsx
import { BrowserRouter, Route, Routes } from "react-router-dom";
import Home from "../pages/Home";
import About from "../pages/About";
import Works from "../pages/Works";
import Contact from "../pages/Contact";
import DashBoardLayout from "./DashBoardLayout";
import Mypage from "../pages/Mypage";
// import Layout from "./Layout";

const Router = () => {
  return (
    <BrowserRouter>
      {/* <Layout> */}
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
        <Route path="/works" element={<Works />} />
        <Route path="/contact" element={<Contact />} />
        <Route path="works/:id" element={<Works />} />
        <Route path="dashboard" element={<DashBoardLayout />}>
          <Route path="mypage" element={<Mypage />} />
        </Route>
      </Routes>
      {/* </Layout> */}
    </BrowserRouter>
  );
};

export default Router;
// DashBoardLayout.jsx
import { Outlet } from "react-router-dom";

const DashBoardLayout = () => {
  return (
    <div>
      <h1>대쉬보드</h1>
      <Outlet />
    </div>
  );
};

export default DashBoardLayout;

..! 몇 일 전 부 터, git 잔디가 안 심어지고 있었다. . . .

 

 

은근한 뿌듯함과 소확행 성취감을 주는 내 작고 소중한 잔디.. 🌱

구글아 알려줘

 

 

 

1. 터미널에 입력하면

git config --list

user 정보가 나온다

 

2. github에 설정되어있는 내 이름, 내 이메일 확인

( 이메일은 Settins 들어가보면 내가 설정해둔 메일주소를 알 수 있음 ) - 일치하는 이메일이라 문제없음

 

이름이.. 위에 캡쳐한건 수정 후 여서 일치하지만,

원래는 한글이름 ( user.name=이 하 름 )으로 설정 되어 있었다.

 

 

 

 

 

 

 

3. 일치하지 않은 유저네임 바꿔줘

git config --global user.name "LeeHareum"

 

하고서 테스트 레포에 푸시하니까 잔디가 자라났다.

 

근데 왜 한글이름으로 바뀌어 있던거야 ??

  1. 기기에서 설정 변경: 같은 기기를 사용하는 다른 사용자가 git config를 사용하여 설정을 변경했을 수 있습니다.
  2. IDE나 툴의 자동 설정: 일부 통합 개발 환경(IDE)이나 툴에서 git 설정을 자동으로 변경할 수 있습니다.
  3. 프로젝트별 설정: 특정 프로젝트의 루트 디렉토리에서 git 설정이 변경되었을 수 있습니다.

라고 한다.

 

나 혼자 쓰니까 1은 아니고, 2나 3인가본데 그러니까 왜 너네 맘대로 바꿔.. 백준 연결한 것도 언제부턴가 안되길래
재 연결 했었는데, 그때 같이 변경 되었던건가 왜 ..? ? 😕⁇