[英]How to create a new page with a component in React?
我目前在我的 React 應用程序中有一個頁面,它在一個頁面上呈現所有組件。 我想讓一個按鈕打開一個占據整個頁面的新組件,就像打開一個新站點一樣。
有什么辦法可以做到這一點? 下面是我的代碼。
應用程序.js:
import { Route, Routes } from 'react-router-dom';
import './App.css';
import Navbar from './components/Navbar';
import Homepage from './components/Homepage';
import About from './components/About';
import Skills from './components/Skills';
import Projects from './components/Projects';
import ContactMe from './components/ContactMe';
import Contact from './components/Contact';
function App() {
return (
<>
<Navbar />
<div className='homepage-container-web'>
<Homepage />
<About />
<Skills />
<Projects />
<ContactMe />
</div>
<div className='homepage-container-devices'>
<Routes>
<Route path='/' element={<Homepage />} />
<Route path='/about' element={<About />}/>
<Route path='/projects' element={<Projects />}/>
<Route path='/contact' element={<ContactMe />}/>
</Routes>
</div>
</>
);
}
export default App;
聯系我.jsx:
import '../App.css';
import { ReactComponent as LinkedInLogo } from '../images/linkedin.svg';
function ContactMe() {
return(
<>
<div className='contact-container' id='contactMe'>
<div className='contact-box'>
<h1>Want to connect?</h1>
<button id='contact-me-btn'>Contact Me </button>
<a>
<LinkedInLogo title='LinkedIn Profile' id='linkedinprofile-svg'/>
</a>
</div>
<div className='contact-container-footer'>
<h7>Designed and built by <a href='https://github.com/BlazingIsFire' target='_blank' title='Github'>Placeholder</a>.</h7>
</div>
</div>
</>
)
}
export default ContactMe;
我想要ContactMe.jsx中的<button>Contact me!</button
打開一個名為<Contact />
的新組件/頁面。 我希望聯系人頁面占據整個頁面。
任何幫助表示贊賞!
是的,如下所示,您可以有嵌套路線或單獨路線。 錯誤和連接是單獨的路由,而其他路由是分層的。
索引.js
import ReactDOM from "react-dom/client";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Layout from "./Layout";
import Home from "./Home";
import About from "./About";
import Contact from "./Contact";
import Connect from "./Connect";
import Error from "./Error";
export default function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Home />} />
<Route path="about" element={<About />} />
<Route path="contact" element={<Contact />} />
</Route>
<Route path="/connect" element={<Connect />} />
<Route path="*" element={<Error />} />
</Routes>
</BrowserRouter>
);
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<App />);
布局.js
import { Outlet, Link } from "react-router-dom";
const Layout = () => {
return (
<>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/contact">Contact</Link>
</li>
</ul>
</nav>
<Outlet />
</>
);
};
export default Layout;
首頁.js
const Home = () => {
return <h1>Home</h1>;
};
export default Home;
關於.js
const About = () => {
return <h1>About Page</h1>;
};
export default About;
聯系人.js
import { Link } from "react-router-dom";
const Contact = () => {
return (
<div>
<h1>Contact Me</h1>
<Link to="/connect">Try & Reach Me!</Link>
</div>
);
};
export default Contact;
連接.js
const Connect = () => {
return <h1>Connected to me!</h1>;
};
export default Connect;
錯誤.js
import { Link } from "react-router-dom";
const NoPage = () => {
return (
<div>
<h1>404 No Page Found!</h1>
<Link to="/">Go Home</Link>
</div>
);
};
export default NoPage;
希望這可以幫助。
要呈現頁面組件,您需要使用 react- Router
react-router-dom
庫中的路由器。
你的App
組件應該是這樣的:
function App() {
return (
// Add an import for this
<BrowserRouter>
<Navbar />
<div className='homepage-container-web'>
<Routes>
<Route path='/' element={<Homepage />} />
<Route path='/about' element={<About />}/>
<Route path='/projects' element={<Projects />}/>
<Route path='/contact-me' element={<ContactMe />}/>
// This was missing
<Route path='/contact' element={<Contact />}/>
</Routes>
</div>
</BrowserRouter>
);
}
這將使頁面的全部內容成為分配給Route
組件的element
道具的組件之一。 也就是說,當 URL 是/about
時,您將看到About
組件,當它是/projects
時,您將看到Projects
組件等。
要在單擊按鈕時導航到Contact
組件,您需要:
function ContactMe() {
// Use useNavigate hook
const navigate = useNavigate();
return (
<div className="contact-container" id="contactMe">
<div className="contact-box">
<h1>Want to connect?</h1>
// Navigate to /contact-me on click
<button id="contact-me-btn" onClick={() => navigate("/contact-me")}>
Contact Me{" "}
</button>
<a>
<LinkedInLogo title="LinkedIn Profile" id="linkedinprofile-svg" />
</a>
</div>
<div className="contact-container-footer">
<h7>
Designed and built by{" "}
<a
href="https://github.com/BlazingIsFire"
target="_blank"
title="Github"
>
Andrew Schweitzer
</a>
.
</h7>
</div>
</div>
);
}
有幾種方法可以實現這一點。 我會使用來自 react-router-dom 的 Link Tag,但我還是會在這里列出三個示例。 從第一個開始,最簡單的一個,不用react-router-dom這樣的庫。
例子:
function ContactMe({contact}) {
return(
................
<a href={`/${contact}`}>
<button id='contact-me-btn'>
Click to redirect to {contact === '' ? "home" : contact}
</button>
</a>
)
}
const navigate = useNavigate();
navigate("/nameofpage");
例子:
import { useNavigate } from "react-router-dom";
function ContactMe({contact}) {
const navigate = useNavigate();
return(
................
<button className="my-button" onClick={() => { navigate(`/${contact}`) }}>
Click to redirect to {contact === '' ? "home" : contact}
</button>
)
}
例子:
<Link to="nameofpage"> Element </Link>
import { Link } from "react-router-dom";
function ContactMe({contact}) {
return(
................
<Link to={`/${contact}`}>
<button id='contact-me-btn'>
Click to redirect to {contact === '' ? "home" : contact}
</button>
</Link>
)
}
我希望它有所幫助。
通過使用@DoGzTheFiGhTeR 的回答,我想到我可以將所有組件放入一個名為<Homepage />
的主組件中。 一旦我這樣做了,我就能夠在我的 App.js 中創建 2 個單獨的路由。
我的代碼在下面,希望它會有所幫助。
應用程序.js:
<Navbar />
<div className='homepage-container-web'>
<Routes>
<Route>
<Route path='/' element={<Homepage />}/>
</Route>
<Route path='/contact' element={<Contact />}/>
</Routes>
</div>
<div className='homepage-container-devices'>
<Routes>
<Route path='/' element={<Home />} />
<Route path='/about' element={<About />}/>
<Route path='/projects' element={<Projects />}/>
<Route path='/contact' element={<ContactMe />}/>
</Routes>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.