I am using a MacBook Pro with Big Sur 11.6.4 and with Node 17.6.0. Before the White Screen my Code was like this:
Navbar.component.jsx
import React from 'react';
import {
Nav,
NavLink,
Bars,
NavMenu,
NavBtn,
NavBtnLink,
} from './NavbarElements';
const Navbar = () => {
return (
<>
<Nav>
<Bars />
<NavMenu>
<NavLink to='/' activeStyle>
Home
</NavLink>
<NavLink to='/about' activeStyle>
About
</NavLink>
<NavLink to='/browse' activeStyle>
Browse
</NavLink>
<NavLink to='/sign-up' activeStyle>
Sign Up
</NavLink>
</NavMenu>
<NavBtn>
<NavBtnLink to='/signin'>Sign In</NavBtnLink>
</NavBtn>
</Nav>
</>
);
};
export default Navbar
App.js
import React, { Component } from 'react';
import Navbar from './Components/Navbar/Navbar.component';
import Button from '#mui/material/Button'
import logo from './logo.svg';
import { BrowserRouter as Router } from 'react-router-dom';
import './App.css';
import Footer from './Components/Footer';
class App extends Component {
render() {
return (
<div className="App">
<Router><Navbar /></Router>
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
<Button variant="contained">Learn React</Button>
</a>
</header>
<Footer/>
</div>
)
}
}
export default App;
When I made some changes afterwards when I decided to add some routing to the Navbar.jsx file making it look like this:
import React from 'react';
import {
Nav,
NavLink,
Bars,
NavMenu,
NavBtn,
NavBtnLink,
} from './NavbarElements';
import { BrowserRouter as Route, Routes } from "react-router-dom";
import ReactDOM from 'react-dom'
import Browse from '../../Pages/Browse/Browse'
import About from '../../Pages/About/About'
const Navbar = () => {
return (
<>
<Nav>
<Bars />
<NavMenu>
<NavLink to='/' activeStyle>
Home
</NavLink>
<NavLink to='/about' activeStyle>
About
</NavLink>
<NavLink to='/browse' activeStyle>
Browse
</NavLink>
<NavLink to='/sign-up' activeStyle>
Sign Up
</NavLink>
</NavMenu>
<NavBtn>
<NavBtnLink to='/signin'>Sign In</NavBtnLink>
</NavBtn>
<Routes>
<Route path="/" />
<Route path="/about" element={<About />} />
<Route path="/browse" element={<Browse />} />
</Routes>
</Nav>
</>
);
};
const rootElement = document.getElementById("root");
ReactDOM.render(<Navbar />, rootElement);
export default Navbar
Error Part 1
Error Part 2
Is there anything I can do to fix this?
Im Sorry if this is a silly mistake. I am just starting to learn react. My apologies if this might feel like a waste of time.
I fixed it.
STEP 1
I just had to remove all other instance of <Route path='' element={}> and anything related to it on other files in the project.
STEP 2
Next, I needed to reformat the App.js making it look like this:
import {BrowserRouter as Router, Routes, Route } from "react-router-dom";
import Home from './Pages/Home/Home.jsx';
import Browse from './Pages/Browse/Browse.jsx'
import About from './Pages/About/About.jsx'
import Footer from "./Components/Footer.jsx";
import Navbar from "./Components/Navbar/Navbar.component.jsx";
import './App.css';
function App() {
return (
<Router>
<Navbar />
<Routes>
<Route path='/' exact component={<Home/>} />
<Route path='/browse' component={<Browse/>} />
<Route path='/about' component={<About/>} />
</Routes>
<Footer/>
</Router>
);
}
export default App;
RESULT
I ended up with two errors left and one GOOD warning:
Warning
So, Thats it.
Related
When I click on "blog" I would like to open only blog section on the whole page, not the extra blog component together with other components on main page. When I click now on Blog, it opens after team component on the same page. How can I change it and open as a whole page?
import React from 'react';
import './App.css';
import { BrowserRouter, Route} from "react-router-dom";
import Header from './components/Header';
import Home from './components/Home';
import About from './components/About';
import Team from './components/Team';
import Blog from './components/Blog';
import Contact from './components/Contact';
import ScrollToTop from './components/ScrollToTop';
const App = () => {
return (
<BrowserRouter>
<Header />
<Home />
<About />
<Team />
<Route path="/blog" component={Blog}></Route>
<Contact />
<ScrollToTop />
</BrowserRouter>
);
}
export default App;
This is my another component:
import React from 'react';
import { Link as Link1} from 'react-scroll';
import { Link as Link2 } from 'react-router-dom';
import styled from 'styled-components';
const LeftNav = ({ open }) => {
return (
<NavMenu open={open}>
<ul>
<li>
<Link1
smooth={true}
spy={true}
offset={0}
duration={1000}
to="home"
>Home</Link1>
</li>
<li>
<Link1
activeClass="active"
smooth={true}
spy={true}
offset={0}
duration={1200}
to="about"
>About</Link1>
</li>
<li>
<Link1
activeClass="active"
smooth={true}
spy={true}
offset={0}
duration={1200}
to="team"
>Team</Link1>
</li>
<li>
<Link2 id="blog"
to="/blog"
target="_blank"
>Blog</Link2>
</li>
<li>
<Link1
activeClass="active"
smooth={true}
spy={true}
offset={0}
duration={1200}
to="contact"
>Contact</Link1>
</li>
</ul>
</NavMenu>
)
}
export default LeftNav
````
You are always rendering the Header, Home, About, etc because they are not inside of a <Route/> component under <BrowserRouter/>. As in the your Blog component is being rendered only when you are on the /blog route, but the rest of your components are always being shown since there is no <Route/> wrapping them. You should put your main page in one route and your blog page under another, for example:
const App = () => {
return (
<BrowserRouter>
<Route path="/home"> {/* <-- insert the right path for your main page here*/}
<Header />
<Home />
<About />
<Team />
<Contact />
<ScrollToTop />
</Route>
<Route path="/blog" component={Blog}></Route>
</BrowserRouter>
);
}
In the example above you should see the main page only when you go to {base_url}/home, so you will have to configure it to your needs if you need something different. Take a look at the Route documentation on its path prop to properly set it up.
I am trying to change the header to a link that calls for Homepage component. Right now it displays a logo title. But I want my users to be able to click on it to direct them to the landing page .
import React from 'react';
import { NavLink } from 'react-router-dom';
import AuthContext from '../../context/auth-context';
import './MainNavigation.css';
// import Homepage from '../../pages/Homepage';
const mainNavigation = props => (
<AuthContext.Consumer>
{context => {
return (
<header className="main-navigation">
<div className="main-navigation__logo">
<h1>Lux Lab Hair Salon</h1> // ....... change this to a link
</div>
<nav className="main-navigation__items">
<ul>
<li>
<NavLink to="/events">Available Hours</NavLink>
</li>
{!context.token && (
<li>
<NavLink to="/auth">Sing In | Sing Up</NavLink>
</li>
)}
{context.token && (
<React.Fragment>
<li>
<NavLink to="/bookings">Bookings</NavLink>
</li>
<li>
<button onClick={context.logout}>Logout</button>
</li>
</React.Fragment>
)}
</ul>
</nav>
</header>
);
}}
</AuthContext.Consumer>
);
export default mainNavigation;
<h1><NavLink to={'...'}>Lux Lab Hair Salon</NavLink></h1> or just a <NavLink style={{ fontSize: '20px' }}>Lux Lab Salon</NavLink>
So the problem is how to call for a component in a react navigation bar.
Here are the steps I followed to resolve the problem.
I imported BrowserRouter in App.js and used it to define the path of the homepage
in App.js
import {BrowserRouter, Route, Redirect, Switch} from 'react-router-dom';
import Homepage from './pages/Homepage';
class App extends Component {
render() {
return (<BrowserRouter>
<React.Fragment>
<Navigation/>
<Switch>
<Route path="/" component={Homepage}/>
<Route path="/nav1path" component={Page1Component}/>
<Route path="/nav2path" component={Page2Component}/>
{!this.state.token && <Redirect to="/" exact/>}
</Switch>
</React.Fragment>
</BrowserRouter>);
}
}
export default App;
Then I used the suggestion above to circle my H1 tag with NavLink.
<NavLink to={'/'}>
Header title
Also don't forget to import other components before you call them inside Route.
Here is the App.js:
import React from "react";
import { BrowserRouter as Router, Route } from "react-router-dom";
import "bootstrap/dist/css/bootstrap.min.css";
import NavBar from "./components/navbar.component";
import ExercisesList from "./components/exercises-list.component";
import EditExercise from "./components/edit-exercise.component";
import CreateExercise from "./components/create-exercise.component";
import CreateUser from "./components/create-user.component";
function App() {
return (
<Router>
<div className="container">
<NavBar />
<br />
<Route path="/" component={ExercisesList} />
<Route path="/edit/:id" component={EditExercise} />
<Route path="/create" component={CreateExercise} />
<Route path="/create" component={CreateUser} />
</div>
</Router>
);
}
export default App;
here is Navbar component code:
import React, { Component } from "react";
import { Link } from "react-router-dom";
export default class Navbar extends Component {
render() {
return (
<nav className="navbar navbar-dark bg-dark never-expend-lg ">
<Link to="/" className="navbar-brand">
ExeriseTracker
</Link>
<div className="collpase navbar-collapse">
<ul class="navbar-nav mr-auto">
<li class="navbar-item">
<Link to="/" className="nav-link">
Exercises
</Link>
</li>
<li className="navbar-item">
<Link to="/create" className="nav-link">
Create Exercise Log
</Link>
</li>
<li className="navbar-iteam">
<Link to="/user" className="nav-link">
Create User
</Link>
</li>
</ul>
</div>
</nav>
);
}
}
this a react app which has other component other then nav bar but the react routing is not working, Can any one help on this?
Also i have used some basic bootstrap code just for testing.
the result are here where im clicking one thing and it coming up with 3 statements from other 3 pages in this same page.
enter image description here
In app.js, import Switch from react-router-dom and wrap your routes in Switch:
import { BrowserRouter as Router, Route, Switch } from "react-router-dom";
...
<Switch>
<Route path="/" component={ExercisesList} />
<Route path="/edit/:id" component={EditExercise} />
<Route path="/create" component={CreateExercise} />
<Route path="/create" component={CreateUser} />
</Switch>
I use Router component in my react app to show different components when clicking the navbar. however, when I click a link in navbar, the address shows the path but the component which I call when the path equals that, is now shown in the page.
this is my App.js
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { Route, BrowserRouter as Router, Switch } from "react-router-dom";
import NavBar from "./Components/navBar";
import Header from "./Components/ddrHeader";
import Home from "./Components/home";
import Plan from "./Components/plan";
import Waiting from "./Components/waiting";
import "./App.css";
class App extends Component {
render() {
return (
<Router>
<React.Fragment>
<NavBar />
<Switch>
<Route exact path="/" Component={Home} />
<Route path="/ddr" Component={Header} />
<Route path="/plan" Component={Plan} />
<Route path="/waiting" Component={Waiting} />
</Switch>
</React.Fragment>
</Router>
);
}
}
export default App;
this is my index.js
import React, { Component } from "react";
import ReactDOM from "react-dom";
import { BrowserRouter as Router } from "react-router-dom";
import * as serviceWorker from "./serviceWorker";
// import DDR from './Components/ddr';
import App from "./App";
ReactDOM.render(
<Router>
<App />
</Router>,
document.getElementById("root")
);
serviceWorker.register();
and this is my navbar :
import React, { Component } from "react";
import { Link, BrowserRouter as Router } from "react-router-dom";
import "bootstrap/dist/css/bootstrap.css";
class NavBar extends Component {
render() {
return (
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<ul class="navbar-nav">
<li class="nav-item active">
<Link className="nav-link" to="/">
Home<span class="sr-only">(current)</span>
</Link>
</li>
<li class="nav-item">
<Link className="nav-link" to="/ddr">
DDR
</Link>
</li>
<li class="nav-item">
<Link className="nav-link" to="/plan">
Plan
</Link>
</li>
<li class="nav-item">
<Link className="nav-link" to="/waiting">
Waiting
</Link>
</li>
</ul>
</nav>
);
}
}
export default NavBar;
as react-router(component prop). The prop Component is wrong, should be component
<Switch>
// <Route exact path="/" Component={Home} /> // wrong
<Route exact path="/" component={Home} /> //correct
</Switch>
I am rebuilding my portfolio in React, and while setting up the menu that I am using from semantic UI, I observe that the first menu item is always active.
I am fairly new to React, and this is my first project on the same.
So, here's my Index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.querySelector("#root"));
Here's my App.js
import "./main.css";
import React from "react";
import { Route, NavLink, BrowserRouter as HashRouter } from "react-router-dom";
import home from "./home";
import about from "./about";
import portfolio from "./portfolio";
import resume from "./resume";
import contactMe from "./contactMe";
class mainContent extends React.Component {
render() {
return (
<HashRouter>
<div className="main-content">
<div className="ui five item menu">
<NavLink to="/" className="item">
Home
</NavLink>
<NavLink to="/about" className="item">
About
</NavLink>
<NavLink to="/portfolio" className="item">
Portfolio
</NavLink>
<NavLink to="/resume" className="item">
Resume
</NavLink>
<NavLink to="/contactMe" className="item">
Contact Me
</NavLink>
</div>
<div className="content">
<Route exact path="/" component={home} />
<Route path="/about" component={about} />
<Route path="/portfolio" component={portfolio} />
<Route path="/resume" component={resume} />
<Route path="/contactMe" component={contactMe} />
</div>
<div className="footer">
<footer className="fixed">
© Credits
</footer>
</div>
</div>
</HashRouter>
);
}
}
export default mainContent;
everything looks fine, except that first item does not seem to loose the active status when navigated to different component.
Here's an image that you can refer to -
How can I solve this issue? so that only the current link is shown as active.
Appreciate your help and feedback.
Thanks.
You can use the exact prop on the NavLink components too. The root route / is always going to match because it is the root route.
This is what you need to add
<NavLink to="/" className="item" exact>Home</NavLink>