개발자
안녕하세요 독학 하고 있는 학생입니다.. 작은 프로젝트로 혼자서 홈페이지를 만들고 있습니다. 우선 로그인 페이지부터 만들고 있는데, 로그인페이지에는 아이디찾기 비밀번호찾기 등등 많은 페이지가 들어가더라구요.. 그래서 리액트 라우터를 공부하고 적용시켰습니다. 코드는 아래와 같습니다. 이렇게 해도 제가 원하는대로 로그인페이지에서 아이디 찾기 페이지로 이동하고 하는 것은 맞는데 App.js에 이렇게 주저리주저리 원하는 것을 다 넣어두면 나중에 전체적으로 페이지를 완성시켰을 때 App.js에 너무 방대한 내용이 들어가지않나..? 싶더라구요.. 그래서 중첩된 라우트도 찾아서 공부했는데 크흡..암만해도 적용이 안됩니다.. 그래서 그냥 이대로 홈페이지를 계속 만들어도 되는지,,아니면 저의 고민을 해결할 방법이 중첩된 라우트가 맞는지 알고싶습니다.. 맞다면 다시 공부해야겠죠 ㅜ.. 답변부탁드립니다 (_ _) import "./App.css"; import { Route, Routes } from "react-router-dom"; import WigTemplate from "./components/wigtemplate"; import FindId from "./components/findId"; import FindPwd from "./components/findPwd"; import SignIn from "./components/signIn"; import NotFound from "./components/notFound"; function App() { return ( <Routes> <Route path="/" element={<WigTemplate />} /> <Route path="/findId" element={<FindId />} /> <Route path="/findPwd" element={<FindPwd />} /> <Route path="/signIn" element={<SignIn />} /> <Route path="*" element={<NotFound />} /> </Routes> ); } export default App; ---------------------------------------------------------- import React from "react"; import styled from "styled-components"; import WigLoginButton from "./wigLoginButton"; import WigHeader from "./wigHeader"; import WigInput from "./wigInput"; import WigFind from "./wigFind"; const WigTemplateContainer = styled.div` height: 100vh; display: flex; align-items: center; justify-content: center; `; const WigTemplateBlock = styled.div` width: 500px; height: 600px; background: #d0ebff; border-radius: 80px; `; function WigTemplate() { return ( <WigTemplateContainer> <WigTemplateBlock> <WigHeader></WigHeader> <WigInput></WigInput> <WigFind></WigFind> <WigLoginButton></WigLoginButton> </WigTemplateBlock> </WigTemplateContainer> ); } export default WigTemplate; ------------------------------------------------------- import React from "react"; import styled from "styled-components"; import { RxDividerVertical } from "react-icons/rx"; import { Link } from "react-router-dom"; const FindBlock = styled.div` display: flex; justify-content: center; `; const ABlock = styled(Link)` color: black; font-size: 0.9rem; text-decoration: none; `; function WigFind() { return ( <FindBlock> <ABlock to="/findId">아이디 찾기</ABlock> <RxDividerVertical style={{ marginTop: "3px" }} /> <ABlock to="/findPwd">비밀번호 찾기</ABlock> <RxDividerVertical style={{ marginTop: "3px" }} /> <ABlock to="/signIn">회원가입</ABlock> </FindBlock> ); } export default WigFind;
답변 2
인기 답변
도움이 될지 모르겠지만 이렇게 시도해보세여 import routes from './routes'; import { createBrowserRouter, RouterProvider } from 'react-router-dom'; const router = createBrowserRouter(routes); function App() { const container = document.getElementById('root'); if (!container) { return; } const root = ReactDOM.createRoot(container); root.return (( <RouterProvider router={router} /> )); } App 파일 -------------------------------------------------------- import WigTemplate from "./components/wigtemplate"; import Layout from './components/Layout'; const routes = [ { element: <Layout />, children: [ { path: '/', element: <WigTemplate /> }, // 추가 ], }, ]; export default routes; app이랑 같은 라인에 routes파일 ------------------------------------------------------------------------ import { Outlet } from 'react-router-dom'; import Header from './Header'; export default function Layout() { return ( <Container> <Header /> <Outlet /> </Container> ); } components 폴더안에 Layout파일 ------------------------------------------------------------------------ import { Link} from 'react-router-dom' export default function Header() { return ( <div> <nav> <ul> <li> <Link to="/">WigTemplate??</Link> </li> </ul> </nav> </div> ); } components 폴더안에 header 파일
람
작성자
없음 비전공 • 2023년 05월 17일
안녕하세요 선생님 답변감사합니다!!! 일단 코드 적용시켜보고 공부해보자 해서 선생님이 알려주신대로 적용시켰는데요,, 다른거는 다 해결했는데 Layout컴포넌트에서 사용한 Container컴포넌트는 어디서 가져와야 할까요..?
Yoon
취준생 • 2023년 05월 17일
Styled-components 라서 div로 변경하심 댈거같아요!
람
작성자
없음 비전공 • 2023년 05월 17일
흑흑..이것저것 오류가 나는데 제가 공부가 부족해서 해결할수가 없네요! 공부해서 보내주신거 이해할 수 있도록 해봐야겠습니다 답변감사합니다
안녕하세요! 리액트 라우팅에 대한 고민을 알려주셔서 감사합니다. 코드를 살펴보면서 몇 가지 제안을 해드릴게요. 1. 중첩된 라우트와 컴포넌트 구조: 현재 코드에서 중첩된 라우트를 구현하려고 시도하셨는데, 중첩된 라우트를 구현하는 방법에는 여러 가지가 있습니다. 일반적으로 중첩된 라우트를 구현하려면 부모 컴포넌트와 자식 컴포넌트를 활용하여 구조를 만들어야 합니다. 예를 들어, App.js에서 라우트 구조를 다음과 같이 변경할 수 있습니다: 이렇게 하면 / 경로에 대한 라우트에 중첩된 라우트가 설정되고, 'WigTemplate' 컴포넌트에 중첩된 자식 컴포넌트들이 나타날 수 있습니다. 따라서 'WigTemplate' 컴포넌트에서는 'WigFind', 'WigLoginButton' 등의 컴포넌트를 자식으로 가질 수 있습니다. 2. 컴포넌트 구조화: App.js에 모든 컴포넌트를 직접 작성하는 대신, 각 페이지에 해당하는 컴포넌트를 만들어 관리하는 것이 코드 구조화에 도움이 됩니다. 예를 들어, 'FindId', 'FindPwd', 'SignIn'과 같은 각각의 페이지 컴포넌트를 만들고, 해당 컴포넌트에서 필요한 하위 컴포넌트들을 구성하도록 할 수 있습니다. 3. 컴포넌트 재사용성: 현재 코드에서 'WigFind' 컴포넌트는 로그인 페이지에만 사용되는 것으로 보입니다. 이러한 경우, 'WigFind' 컴포넌트를 'WigTemplate' 컴포넌트 내부에 직접 작성하는 대신, 'WigTemplate' 컴포넌트의 하위 컴포넌트로 만들어 재사용성을 높일 수 있습니다. 그리고 로그인 페이지 외의 다른 페이지에서도 해당 컴포넌트를 필요로 할 때 사용할 수 있습니다. 위의 제안들을 참고하여 코드를 조정하고 페이지 구조를 재구성해보세요. 이렇게 하면 App.js에 들어가는 코드 양을 줄이고, 페이지별 컴포넌트를 모듈화하여 재사용성과 코드 가독성을 높일 수 있을 것입니다. 계속 공부하며 개발을 진행하시면서 더 많은 경험과 지식을 쌓을 수 있을 것입니다. 화이팅하세요!
1function App() {
2 return (
3 <Routes>
4 <Route path="/" element={<WigTemplate />}>
5 <Route path="/findId" element={<FindId />} />
6 <Route path="/findPwd" element={<FindPwd />} />
7 <Route path="/signIn" element={<SignIn />} />
8 </Route>
9 <Route path="*" element={<NotFound />} />
10 </Routes>
11 );
12}
커리어리 AI 봇의 답변을 평가해 주세요!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!