\n
App.js file:
\nimport React from 'react';\nimport './styles/App.css';\nimport Navbar from './components/Navbar';\n\nclass App extends React.Component {\n render() {\n return (\n <div className = "App">\n <div id ='container' className = 'container light'>\n <Navbar />\n </div>\n \n </div>\n )\n \n }\n}\n\n\n\nexport default App;\n
\nNavbar.js file:
\nimport React, { Component } from 'react';\nimport '../styles/App.css';\nimport logo from '../img/logo.png'\nimport {\n BrowserRouter as Router,\n Switch,\n Route,\n Link\n} from "react-router-dom";\nimport App from '../App';\nimport About from './About';\nimport Portfolio from './Portfolio';\n\nclass Navbar extends Component {\n render() {\n return (\n <Router>\n <div className="Navbar">\n <nav>\n <ul className="navlist">\n <Link to={App}>\n <li className="active">Home</li>\n </Link>\n <Link to={About}>\n <li>About Me</li>\n </Link>\n <Link to={App}>\n <img className="brand" src={logo} alt="" />\n </Link>\n <Link to={Portfolio}>\n <li>Portfolio</li>\n </Link>\n <li className="toggler"><span role="img" aria-label="dark moon">🌑</span></li>\n </ul>\n </nav>\n <Switch>\n <Route path= {About}>\n <About />\n </Route>\n <Route path= {Portfolio}>\n <Portfolio />\n </Route>\n <Route path= '{App}'>\n <App />\n </Route>\n </Switch>\n </div>\n </Router>\n )\n }\n}\n\nexport default Navbar;\n
\nAbout.JS
\nimport React, { Component } from 'react';\nimport '../styles/App.css';\nimport Navbar from './Navbar'\n\nclass About extends Component {\n render() {\n return (\n <div className="About">\n <Navbar />\n <h1>Hello World, This is the About Page</h1>\n </div>\n )\n }\n}\n\nexport default About;\n
\nPortfolio.JS
\nimport React, { Component } from 'react';\nimport '../styles/App.css';\nimport Navbar from './Navbar'\n\nclass Portfolio extends Component {\n render() {\n return (\n <div className="Portfolio">\n <Navbar />\n <h1>Hello World, This is the Portfolio Page</h1>\n </div>\n )\n }\n}\n\nexport default Portfolio;\n
\nI'm new to React and I'm not sure what I've done wrong. Happy to share any additional information needed.
\n","author":{"@type":"Person","name":"paytoncodes"},"upvoteCount":0,"answerCount":1,"acceptedAnswer":{"@type":"Answer","text":"That's not how Link
is used, the to
prop should have the path you want to navigate, and then you have to use the Route
HOC with two options, pass the component as a child or in the component
prop
Link
\n<Link to="/about">\n About\n</Link>\n
\nRoute
\n<Route path="/about" component={About} />\n
\n<Route path="/about">\n <About/>\n</Route>\n
\n","author":{"@type":"Person","name":"ludwiguer"},"upvoteCount":1}}}Reputation: 92
I'm working on converting a website from a static HTML/CSS/JS site into a React SPA and I want to use React Router for navigation. I installed Router into the correct directory, ran npm start
from the correct directory, and my Terminal shows that everything compiled successfully, but my browser looks like this:
App.js file:
import React from 'react';
import './styles/App.css';
import Navbar from './components/Navbar';
class App extends React.Component {
render() {
return (
<div className = "App">
<div id ='container' className = 'container light'>
<Navbar />
</div>
</div>
)
}
}
export default App;
Navbar.js file:
import React, { Component } from 'react';
import '../styles/App.css';
import logo from '../img/logo.png'
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom";
import App from '../App';
import About from './About';
import Portfolio from './Portfolio';
class Navbar extends Component {
render() {
return (
<Router>
<div className="Navbar">
<nav>
<ul className="navlist">
<Link to={App}>
<li className="active">Home</li>
</Link>
<Link to={About}>
<li>About Me</li>
</Link>
<Link to={App}>
<img className="brand" src={logo} alt="" />
</Link>
<Link to={Portfolio}>
<li>Portfolio</li>
</Link>
<li className="toggler"><span role="img" aria-label="dark moon">🌑</span></li>
</ul>
</nav>
<Switch>
<Route path= {About}>
<About />
</Route>
<Route path= {Portfolio}>
<Portfolio />
</Route>
<Route path= '{App}'>
<App />
</Route>
</Switch>
</div>
</Router>
)
}
}
export default Navbar;
About.JS
import React, { Component } from 'react';
import '../styles/App.css';
import Navbar from './Navbar'
class About extends Component {
render() {
return (
<div className="About">
<Navbar />
<h1>Hello World, This is the About Page</h1>
</div>
)
}
}
export default About;
Portfolio.JS
import React, { Component } from 'react';
import '../styles/App.css';
import Navbar from './Navbar'
class Portfolio extends Component {
render() {
return (
<div className="Portfolio">
<Navbar />
<h1>Hello World, This is the Portfolio Page</h1>
</div>
)
}
}
export default Portfolio;
I'm new to React and I'm not sure what I've done wrong. Happy to share any additional information needed.
Upvotes: 0
Views: 356
Reputation: 2245
That's not how Link
is used, the to
prop should have the path you want to navigate, and then you have to use the Route
HOC with two options, pass the component as a child or in the component
prop
Link
<Link to="/about">
About
</Link>
Route
<Route path="/about" component={About} />
<Route path="/about">
<About/>
</Route>
Upvotes: 1