我创建了一个 React 项目并开始研究路由,路由工作正常但 Navbar 工作不正常
I created one react project and I started working on Routing, Routing is working fine but Navbar is not working properly
! [My Output is shown like this. ]1。我创建了一个 React 项目,为了设计,我使用 Bootstrap 框架。我在我的项目中完成了路由。路由工作正常,但 Navbar 在我的反应项目中工作不正常。所以帮我解决这个问题。
这是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;
在 Components 文件夹中,我有 Navbar 文件夹,我有 Navbar 文件夹,我有 Navbar.js
在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>
);
}
}
在 Pages 文件夹中我有三个文件夹 1)Home 2)Create 3)Edit
这是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>
);
}
}
这是Create.js
import React, { Component } from "react";
export default class Create extends Component {
render() {
return (
<div>
<p>Welcome to Create Component</p>
</div>
);
}
}
这是Edit.js
import React, { Component } from "react";
export default class Edit extends Component {
render() {
return (
<div>
<p>Welcome to Edit Component</p>
</div>
);
}
}
在我的反应项目中,路由工作正常,但导航栏工作不正常。如果我不清楚我的疑问,请发表评论。
我假设工作不正常,"active" class 没有改变。
为此,您可以使用 "NavLink"
而不是 react-router-dom 包中的 "Link"
,并且不要将 "active" class 硬编码为<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>
...
您是否尝试过在所有 <Route>
组件周围添加 Switch
组件?
您可以在第一个基本示例中找到与您要实现的目标类似的示例 here。
尝试:
<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>
实际上您只是忘记将必要的 className
添加到您的链接。
将 className="nav-link"
添加到 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>
! [My Output is shown like this. ]1。我创建了一个 React 项目,为了设计,我使用 Bootstrap 框架。我在我的项目中完成了路由。路由工作正常,但 Navbar 在我的反应项目中工作不正常。所以帮我解决这个问题。
这是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;
在 Components 文件夹中,我有 Navbar 文件夹,我有 Navbar 文件夹,我有 Navbar.js
在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>
);
}
}
在 Pages 文件夹中我有三个文件夹 1)Home 2)Create 3)Edit
这是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>
);
}
}
这是Create.js
import React, { Component } from "react";
export default class Create extends Component {
render() {
return (
<div>
<p>Welcome to Create Component</p>
</div>
);
}
}
这是Edit.js
import React, { Component } from "react";
export default class Edit extends Component {
render() {
return (
<div>
<p>Welcome to Edit Component</p>
</div>
);
}
}
在我的反应项目中,路由工作正常,但导航栏工作不正常。如果我不清楚我的疑问,请发表评论。
我假设工作不正常,"active" class 没有改变。
为此,您可以使用 "NavLink"
而不是 react-router-dom 包中的 "Link"
,并且不要将 "active" class 硬编码为<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>
...
您是否尝试过在所有 <Route>
组件周围添加 Switch
组件?
您可以在第一个基本示例中找到与您要实现的目标类似的示例 here。
尝试:
<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>
实际上您只是忘记将必要的 className
添加到您的链接。
将 className="nav-link"
添加到 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>