I am using react framework to call a function from one component(languagefunction.js) to other component app.js
languagefunction.js
import React, { Component } from "react";
const languagefunction= () => <h1>hello Sir</h1>
export default languagefunction
App.js
import React from 'react';
import '../node_modules/bootstrap/dist/css/bootstrap.min.css';
import './App.css';
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
import {Dropdown,DropdownButton}from 'react-bootstrap';
import Login from "./components/login.component";
import SignUp from "./components/signup.component";
import languagefunction from "./components/languagefunction";
function App() {
return (<Router>
<div className="App">
<languagefunction/>
<nav className="navbar navbar-expand-lg navbar-light fixed-top">
<div className="container">
<Link className="navbar-brand" to={"/sign-in"}>Tira Desk</Link>
<div className="collapse navbar-collapse" id="navbarTogglerDemo02">
<ul className="navbar-nav ml-auto">
<li className="nav-item">
<Link className="nav-link" to={"/sign-in"}>Sign in</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to={"/sign-up"}>Sign up</Link>
</li>
<li>
<DropdownButton id="dropdown-basic-button" title="Dropdown button">
<Dropdown.Item eventKey="english_language">English</Dropdown.Item>
<Dropdown.Item eventKey="tamil_language">Tamil</Dropdown.Item>
</DropdownButton>
</li>
</ul>
</div>
</div>
</nav>
<div className="outer">
<p>Testing</p>
<div className="inner">
<Switch>
<Route exact path='/' component={Login} />
<Route path="/sign-in" component={Login} />
<Route path="/sign-up" component={SignUp} />
</Switch>
</div>
</div>
</div></Router>
);
}
export default App;
The issue i am facing is "'languagefunction' is declared but its value is never read."
I have declared the value "import languagefunction from "./components/languagefunction" and used it in <languagefunction/>
I hope i have done it right, care to explain what is the mistake i am making.
In React components need to start with a capital letter, try this instead:
Languagefunction.js
const Languagefunction= () => <h1>hello Sir</h1>
export default Languagefunction
App.js
...
import Languagefunction from "./components/Languagefunction";
function App() {
return (<Router>
<div className="App">
<Languagefunction/>
...
Related
I am new in react facing some issues in hooks can't able to resolve the problem. Can anybody help me.
react.development.js:207 Warning: Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
You might have mismatching versions of React and the renderer (such as React DOM)
You might be breaking the Rules of Hooks
You might have more than one copy of React in the same app
See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem
App.js
import NavBar from "./components/NavBar";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { Home } from "./components/Pages/Home";
import { About } from "./components/Pages/About";
import { Blog } from "./components/Pages/Blog";
import { Contact } from "./components/Pages/Contact";
function App() {
return (
<Router>
<NavBar />
<div className="pages">
<Routes>
<Route exact path="/" element={<Home/>} />
<Route path="/about" element={<About/>} />
<Route path="/blog" element={<Blog/>} />
<Route path="/contact" element={<Contact/>} />
</Routes>
</div>
</Router>
);
}
export default App;
ERROR
enter image description here
Navbar.js
import React, { useState } from "react";
import { NavLink } from "react-router-dom";
import "./NavBar.css";
NavBar()
export default function NavBar() {
const [click, setClick] = useState(false);
const handleClick = () => setClick(!click);
return (
<>
<nav className="navbar">
<div className="nav-container">
<NavLink exact to="/" className="nav-logo">
CodeBucks
<i className="fas fa-code"></i>
</NavLink>
<ul className={click ? "nav-menu active" : "nav-menu"}>
<li className="nav-item">
<NavLink
exact
to="/"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
Home
</NavLink>
</li>
<li className="nav-item">
<NavLink
exact
to="/about"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
About
</NavLink>
</li>
<li className="nav-item">
<NavLink
exact
to="/blog"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
Blog
</NavLink>
</li>
<li className="nav-item">
<NavLink
exact
to="/contact"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
Contact Us
</NavLink>
</li>
</ul>
<div className="nav-icon" onClick={handleClick}>
<i className={click ? "fas fa-times" : "fas fa-bars"}></i>
</div>
</div>
</nav>
</>
);
}
if i remove navbar() from navbar.js more errors are showing
enter image description here
package.json
enter image description here
index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
// import './index.css';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<App />
);
You called NavBar() inside your file.
NavBar()
export default function NavBar() {
You are calling the component like the general function in the Navbar.js.
import React, { useState } from "react";
import { NavLink } from "react-router-dom";
import "./NavBar.css";
[enter image description here][1]
// Please remove this line
// NavBar()
export default function NavBar() {
const [click, setClick] = useState(false);
const handleClick = () => setClick(!click);
return (
<>
<nav className="navbar">
<div className="nav-container">
<NavLink exact to="/" className="nav-logo">
CodeBucks
<i className="fas fa-code"></i>
</NavLink>
<ul className={click ? "nav-menu active" : "nav-menu"}>
<li className="nav-item">
<NavLink
exact
to="/"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
Home
</NavLink>
</li>
<li className="nav-item">
<NavLink
exact
to="/about"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
About
</NavLink>
</li>
<li className="nav-item">
<NavLink
exact
to="/blog"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
Blog
</NavLink>
</li>
<li className="nav-item">
<NavLink
exact
to="/contact"
activeClassName="active"
className="nav-links"
onClick={handleClick}
>
Contact Us
</NavLink>
</li>
</ul>
<div className="nav-icon" onClick={handleClick}>
<i className={click ? "fas fa-times" : "fas fa-bars"}></i>
</div>
</div>
</nav>
</>
);
}
React Component should not be called like a function. That should settled inside of DOM element.
I'm learning reactjs front-end at the moment. But I am stuck that the Routes is not working.
I'm using ReactJS version 18.0.0
My App.js:
import logo from './logo.svg';
import './App.css';
import { Home } from './Home';
import { BrowserRouter, Route, Routes, NavLink } from 'react-router-dom';
function App() {
return (
<BrowserRouter>
<div className="App container">
<h3 className="d-flex justify-content-center m-3">
React JS Frontend
</h3>
<nav className="navbar navbar-expand-sm bg-light navbar-dark">
<ul className="navbar-nav">
<li className="nav-item- m-1">
<NavLink className="btn btn-light btn-outline-primary" to="/home">
Home
</NavLink>
</li>
</ul>
</nav>
<Routes>
<Route path='/home' component={Home} />
</Routes>
</div>
</BrowserRouter>
);
}
export default App;
Then my Home.js:
import React,{Component} from 'react';
export class Home extends Component{
render(){
return(
<div>
<h3>This is Home page</h3>
</div>
)
}
}
Need advice please.
Thank you.
You seem to be confusing the component prop for your Route with an older version of react-router.
Change it to element like this:
<Routes>
<Route path='/home' element={Home} />
</Routes>
I'm using react-router-dom for routing and the problem is that url is changing when clicked on navigation bar elements, but components belonging to other pages is not rerendering. Here are my codes:
App.js:
import React from 'react';
import { Route, Switch } from 'react-router-dom';
import { BrowserRouter as Router } from 'react-router-dom';
import Header from './common/Header';
import Footer from './common/Footer';
import MainPage from './layout/MainPage';
import GiftWrapping from './layout/GiftWrapping';
import Contact from './layout/Contact';
import Catalog from './layout/Catalog';
function App() {
return (
<div className="App">
<Router>
<Header />
<Switch>
<Route path="/home" component={MainPage} />
<Route path="/catalog" component={Catalog} />
<Route path="/giftwrapping" component={GiftWrapping} />
<Route path="/contact" component={Contact} />
</Switch>
<Footer />
</Router>
</div>
);
}
export default App;
Header.js:
<nav className="Header-bottom">
<div className="container clearfix">
<Router>
<div className="Left-nav">
<ul>
<li>
<Link to={"/home"} className="active-nav-element">Main Page</Link>
</li>
<li>
<Link to={"/catalog"}>Catalog</Link>
</li>
<li>
<Link to={"/contact"}>Contact</Link>
</li>
<li>
<Link to={"/giftwrapping"}>Gift Wrapping</Link>
</li>
<li>
<Link to={"/catalog"} className="dropdown-toggle">Catalog</Link>
</li>
</ul>
</div>
</Router>
</div>
</nav>
import React from "react";
import { Link, withRouter } from "react-router-dom";
function Header() {
return (
<nav className="Header-bottom">
<div className="container clearfix">
<div className="Left-nav">
<ul>
<li>
<Link to={"/home"} className="active-nav-element">
Main Page
</Link>
</li>
<li>
<Link to={"/catalog"}>Catalog</Link>
</li>
<li>
<Link to={"/contact"}>Contact</Link>
</li>
</ul>
</div>
</div>
</nav>
);
}
export default withRouter(Header);
Instead of adding a separate <Router> in the <header /> please use the withrouter method.
Codesandbox reference
! [My Output is shown like this. ]1. I created one react project, and for designing I am using Bootstrap framework. I am done routing in my project. Routing is working fine, But Navbar is not working properly in my react project. So help me to resolve this issue.
This is App.js
import React from 'react';
import './App.css';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import Home from './Pages/Home/Home';
import Edit from './Pages/Edit/Edit';
import Create from './Pages/Create/Create';
import Navbar from './Components/Navbar/Navbar';
function App() {
return (
<Router>
<Navbar></Navbar>
<div className="container">
<h2>MERN</h2>
<Route path='/' exact component={Home}></Route>
<Route path='/id:/edit' component={Edit}></Route>
<Route path='/create' component={Create}></Route>
</div>
</Router>
);
}
export default App;
In Components Folder, I have Navbar folder, I Navbar folder I have Navbar.js
In Navbar.js
import React, { Component } from "react";
import "./Navbar.css";
import { Link } from "react-router-dom";
export default class Navbar extends Component {
render() {
return (
<div>
<nav className="navbar navbar-expand-lg navbar-light bg-light">
<a className="navbar-brand" href="www.facebook.com">
Navbar
</a>
<button
className="navbar-toggler"
type="button"
data-toggle="collapse"
data-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span className="navbar-toggler-icon"></span>
</button>
<div className="collapse navbar-collapse" id="navbarNav">
<ul className="navbar-nav">
<li className="nav-item active">
<Link to="/">Home</Link>
</li>
<li className="nav-item">
<Link to="/create">Create</Link>
</li>
<li className="nav-item">
<Link to="/id:/edit">Edit</Link>
</li>
</ul>
</div>
</nav>
</div>
);
}
}
In Pages Folder I have three folders 1)Home 2)Create 3)Edit
This is Home.js
import React, { Component } from "react";
import "./Home.css";
export default class Home extends Component {
render() {
return (
<div>
<p>Welcome to Home Component</p>
</div>
);
}
}
This is Create.js
import React, { Component } from "react";
export default class Create extends Component {
render() {
return (
<div>
<p>Welcome to Create Component</p>
</div>
);
}
}
This is Edit.js
import React, { Component } from "react";
export default class Edit extends Component {
render() {
return (
<div>
<p>Welcome to Edit Component</p>
</div>
);
}
}
In my react project Routing is working fine, but Navbar is not working properly. If I am not clear with my doubt please put a comment.
Actually you just forgot to add the necessary className to your Links.
Add className="nav-link" to Links in Navbar.js.
<ul className="navbar-nav">
<li className="nav-item active">
<Link to="/" className="nav-link">
Home
</Link>
</li>
<li className="nav-item">
<Link to="/create" className="nav-link">
Create
</Link>
</li>
<li className="nav-item">
<Link to="/id:/edit" className="nav-link">
Edit
</Link>
</li>
</ul>
Have you tried adding the Switch component around all of your <Route> components?
You can find a similar example to what you are trying to achieve here in the first basic example.
Try:
<Router>
<Navbar></Navbar>
<div className="container">
<h2>MERN</h2>
<Switch>
<Route path='/' exact component={Home}></Route>
<Route path='/id:/edit' component={Edit}></Route>
<Route path='/create' component={Create}></Route>
</Switch>
</div>
</Router>
I am assuming by not-working properly, the "active" class is not changing.
For this you can use "NavLink" instead of "Link" from the react-router-dom package and do not hardcode the "active" class to the <li>
import { NavLink } from 'react-router-dom';
...
<li className="nav-item">
<NavLink to='/' activeClassName="active">Home</NavLink>
</li>
<li className="nav-item">
<NavLink to='/create' activeClassName="active">Create</NavLink>
</li>
<li className="nav-item">
<NavLink to='/id:/edit' activeClassName="active">Edit</NavLink>
</li>
...
I'm using react-router v4 for routing in React. The issues i'm facing is that the react-router changes the location but is unable to render the component. I heard that using redux with react blocks updates but i'm not using redux here .
Sidebar.js
import React, {Component} from 'react';
import {
BrowserRouter as Router,
Link
} from 'react-router-dom';
import $ from 'jquery';
import {withRouter} from 'react-router-dom';
class Sidebar extends Component {
render () {
return (
<Router>
<div>
<button className="navbar-toggler" data-toggle="collapse" data-target="#pill">
<span><i className="fa fa-ellipsis-v"></i> menu</span>
</button>
<div id="pill">
<ul className="nav nav-pills flex-column sidebar">
<li className="nav-item">
<Link to="/" className="nav-link">
<i className="fa fa-dashboard"></i> Dashboard
</Link>
</li>
<li className="nav-item">
<a href="#students" className="nav-link" data-toggle="collapse">
<i className="fa fa-users"></i> Students
</a>
<ul className="collapse" id="students" style={{marginLeft: '-25px'}}>
<li className="nav-item"><Link to="/students" className="nav-link"><i className="fa fa-eye"></i> View students</Link></li>
</ul>
</li>
</ul>
</div>
</div>
</Router>
)
}
}
export default withRouter(Sidebar);
App.js
import React, { Component } from 'react';
import Navbar from './Navbar';
import Sidebar from './Sidebar';
import {BrowserRouter as Router, Route} from 'react-router-dom';
import Dashboard from './Dashboard';
import Students from './Students';
class App extends Component {
render() {
const { match } = this.props;
return (
<Router>
<div>
<Navbar />
<div className="container-fluid main">
<div className="row">
<div className="col-sm-2 area-left">
<Sidebar />
</div>
<div className="col-sm-10 area-right float-right">
<div>
<Route exact path="/" component={Dashboard} />
<Route exact path="/students" component={Students} />
</div>
</div>
</div>
</div>
</div>
</Router>
);
}
}
export default App;
When route is /
When route is /students
Reloading the page renders the component
The Link you specified in your sidebar is trying to use the Router you wrapped the component in, not the Router you defined your links in.
This is what your sidebar component should look like.
import React, {Component} from 'react';
import {
Link,
withRouter
} from 'react-router-dom';
import $ from 'jquery';
class Sidebar extends Component {
render () {
return (
<div>
<div>
<button className="navbar-toggler" data-toggle="collapse" data-target="#pill">
<span><i className="fa fa-ellipsis-v"></i> menu</span>
</button>
<div id="pill">
<ul className="nav nav-pills flex-column sidebar">
<li className="nav-item">
<Link to="/" className="nav-link">
<i className="fa fa-dashboard"></i> Dashboard
</Link>
</li>
<li className="nav-item">
<a href="#students" className="nav-link" data-toggle="collapse">
<i className="fa fa-users"></i> Students
</a>
<ul className="collapse" id="students" style={{marginLeft: '-25px'}}>
<li className="nav-item"><Link to="/students" className="nav-link"><i className="fa fa-eye"></i> View students</Link></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
)
}
}
export default withRouter(Sidebar);
More explanation:
You should only wrap your top level component in the router since it for lack of better terms spawns all the children in your app. Furthermore, it will automatically inject the props for the router unless you are using redux. So unless you're using redux no need for withRouter() *.
*lmk if i'm wrong, i'm not an expert.
Example of your top level app component:
render() {
return(
<Router history={History}>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/student" component={Student} />
</Switch>
</Router>
)
}
Essentially wrap your Route with Switch.
Update App.js to the below
import React, { Component } from 'react';
import Navbar from './Navbar';
import Sidebar from './Sidebar';
import {BrowserRouter as Router, Route, Switch} from 'react-router-dom';
import Dashboard from './Dashboard';
import Students from './Students';
class App extends Component {
render() {
const { match } = this.props;
return (
<Router>
<div>
<Navbar />
<div className="container-fluid main">
<div className="row">
<div className="col-sm-2 area-left">
<Sidebar />
</div>
<div className="col-sm-10 area-right float-right">
<Switch>
<Route exact path="/" component={Dashboard} />
<Route exact path="/students" component={Students} />
</Switch>
</div>
</div>
</div>
</div>
</Router>
);
}
}
export default App;