SemanticUI menu - first item always active - reactjs

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>

Related

React JS Development Build Showing a White Screen

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.

My React App shows a blank white screen on localhost:3000 with no errors

My App.js file is
import { BrowserRouter as Router, Route, Link } from "react-router-dom";
import "bootstrap/dist/css/bootstrap.min.css";
import CreateTodo from "./components/create-todo.component";
import EditTodo from "./components/edit-todo.component";
import TodosList from "./components/todos-list.component";
import logo from "./logo.png";
class App extends Component {
render() {
return (
<Router>
<div className="container">
<nav className="navbar navbar-expand-lg navbar-light bg-light">
<a className="navbar-brand" href="https://codingthesmartway.com" target="_blank">
<img src={logo} width="30" height="30" alt="CodingTheSmartWay.com" />
</a>
<Link to="/" className="navbar-brand">MERN-Stack Todo App</Link>
<div className="collpase nav-collapse">
<ul className="navbar-nav mr-auto">
<li className="navbar-item">
<Link to="/" className="nav-link">Todos</Link>
</li>
<li className="navbar-item">
<Link to="/create" className="nav-link">Create Todo</Link>
</li>
</ul>
</div>
</nav>
<Route path="/" exact component={TodosList} />
<Route path="/edit/:id" component={EditTodo} />
<Route path="/create" component={CreateTodo} />
</div>
</Router>
);
}
}
export default App;
On my browser, all I can see is a blank white screen, thats it. There are just 3 more routes for the application: /, /create, and /edit/:id for which I have connected to three other components TodosList, EditTodo, CreateTodo.
You need to change few things
First import Routes
import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";
Then wrap your router code inside Routes
<Routes>
<Route path="/" exact component={TodosList} />
<Route path="/edit/:id" component={EditTodo} />
<Route path="/create" component={CreateTodo} />
</Routes>
For more info about react router check this link
https://reactrouter.com/docs/en/v6/getting-started/overview
I used to face the same problem. What my mistake was,
when I writing a tap my extension make close tag also.
like
In react,
we use only ""
The open tag and close tag is the problem for me.

How i use react nested routing for my dashboard component

I am building an app that has 4 main pages and inside each, I have various components.
Pages
Home
Dashboard
Components
Home > (Services,About,Login)
Dashboard(Profile,ListUsers,SearchTweets ,etc etc...)
Problems:
So home page components and its routing is perfectly fine.
The problem lies on the dashboard page. if I click on the profile component in the dashboard navbar on left side do not load component on right.Besides it redirect me to profile empty page(Images is attached)
[[1]][1]
Code for dashboard
import React from 'react'
import { Route } from "react-router-dom"
import "./dashboard-style.css"
// protected for only authenticated or logged in users
import NavDashboard from "../components/Navigation/dashboard-nav"
import Profile from "../components/Profile/profile"
function Dashboard() {
return (
<div className="outer-dash-container">
<div className="left-dash-nav">
<NavDashboard />
</div>
<div className="right-dash-panel">
<h1>I want to show my componets here </h1>
<Route exact path="/profile" component={Profile} />
</div>
</div>
)
}
export default Dashboard
Dashboard Navbar Code
import React from 'react'
import { Link, Route } from "react-router-dom"
import "./navbar-style.css"
function NavDashboard() {
return (
<>
<div className="nav-dash-left">
<div className="logo">
{/* <h1><b className="text-format">Tox</b><i>D</i>etector</h1> */}
</div>
<ul>
<li className="nav-link nav-link-dash"><Link to="/profile" className="nav-link"> Profile</Link></li>
<li className="nav-link nav-link-dash"><Link to="/block" ></Link>
List User
</li>
<li className="nav-link nav-link-dash">Search Tweet</li>
<li className="nav-link nav-link-dash">Check Stat</li>
<li className="nav-link nav-link-dash"> Search By Cities</li>
</ul>
</div>
</>
)
}
export default NavDashboard
This is my app routing
import './App.css';
import Register from "../src/components/User_Manage/register"
import { Route, Redirect } from "react-router-dom"
import Login from './components/User_Manage/login';
import Home from './pages/Home'
import Dashboard from "./pages/Dashboard"
function App() {
return (
<>
<Route exact path="/" component={Home} />
<Route exact path="/register" component={Register} />
<Route exact path="/login" component={Login} />
<Route exact path="/dashboard" component={Dashboard} />
</>
);
}
export default App;
remove exact from the place in which you are nested routing it will work fine.

How to make react router, change what file is rendering based on the url

I've been working with react router and its been giving me nothing but trouble. I want a button to load a new page, what I would like is to have a class to switch the file its rendering based on the link. I could be using the wrong thing but so any nudge in the right direction would be great.
here are my 3 main files
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import RouteFile from './RouteFile';
import reportWebVitals from './reportWebVitals';
ReactDOM.render(
<React.StrictMode>
<RouteFile />
</React.StrictMode>,
document.getElementById('root')
);
reportWebVitals();
RoutFile.js
import {
BrowserRouter as Router,
Switch,
Route
} from "react-router-dom";
import App from './App';
import Create from './Create';
function RouteFile() {
return (
<Router>
<Switch>
<Route path="/" children={<App />}/>
<Route path="/create" children={<Create />}/>
</Switch>
</Router>
);
}
export default RouteFile;
App.js
import './App.css';
import {
BrowserRouter as Router,
Link
} from "react-router-dom";
function App() {
return (
<Router>
<div className="App background">
<div className="container">
<li>
<Link className="button a" to="/create"><div className="button-container"><div className="icon new"></div><div className="text new-text">Create</div></div></Link>
</li>
<li>
<Link className="button a" to="/open">Open</Link>
</li>
<li>
<Link className="button a" to="/explore">Explore</Link>
</li>
</div>
</div>
</Router>
);
}
export default App;
Thanks again!
Issue
With the Switch component route order and specificity matter. "/" is a less specific path than "/create" and will be matched and rendered first.
You need only one Router in your app to provide the routing context for all nested route, switch, and link components.
Solution
Order more specific paths before less specific paths in RouteFile.
<Router>
<Switch>
<Route path="/create" children={<Create />}/>
<Route path="/" children={<App />}/>
</Switch>
</Router>
Remove the Router wrapping your links in App.
function App() {
return (
<div className="App background">
<div className="container">
<li>
<Link className="button a" to="/create">
<div className="button-container">
<div className="icon new"></div>
<div className="text new-text">Create</div>
</div>
</Link>
</li>
<li>
<Link className="button a" to="/open">Open</Link>
</li>
<li>
<Link className="button a" to="/explore">Explore</Link>
</li>
</div>
</div>
);
}

Issue with react routing, unable to debug the code and find out the issue

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>

Resources