gpt4 book ai didi

javascript - ReactJS Bootstrap 导航栏和路由不能一起工作

转载 作者:行者123 更新时间:2023-12-03 13:12:52 24 4
gpt4 key购买 nike

我正在尝试使用 ReactJS 创建一个简单的 Web 应用程序,并且我想使用 React-Bootstrap 提供的 Navbar

我创建了一个 Navigation.js 文件,其中包含一个 Navigation 类,以将 Navbar 和路由与 App.js 分开 文件。然而,这两个部分似乎都不起作用。当我加载页面时,它只是空的,没有导航栏。有人能发现错误吗?

导航.js:

import React, { Component } from 'react';
import { Navbar, Nav, Form, FormControl, Button, NavItem } from 'react-bootstrap';
import { Switch, Route } from 'react-router-dom';
import { Home } from './Page';

class Navigation extends Component {
render() {
return (
<div>
<div>
<Navbar>
<Navbar.Brand href="/">React-Bootstrap</Navbar.Brand>
<Navbar.Collapse>
<Nav className="mr-auto">
<NavItem eventkey={1} href="/">
<Nav.Link href="/">Home</Nav.Link>
</NavItem>
</Nav>
<Form inline>
<FormControl type="text" placeholder="Search" className="mr-sm-2" />
<Button variant="outline-success">Search</Button>
</Form>
</Navbar.Collapse>
</Navbar>
</div>
<div>
<Switch>
<Route exact path='/' component={Home} />
<Route render={function () {
return <p>Not found</p>
}} />
</Switch>
</div>
</div>
);
}
}

export default Navigation;

应用程序.js:

import React, { Component } from 'react';
import Navigation from './components/routing/Navigation';



class App extends Component {
render() {
return (
<div id="App">
<Navigation />
</div>
);
}
}

export default App;

我已经尝试使用包含来自 react-router-bootstrapLinkContainerNavItem ,这导致了相同的结果。

为了完整性,Page.js:

import React, { Component } from 'react';
import { Link } from 'react-router-dom';

export const Page = ({ title }) => (
<div className="App">
<div className="App-header">
<h2>{title}</h2>
</div>
<p className="App-intro">
This is the {title} page.
</p>
<p>
<Link to="/">Home</Link>
</p>
<p>
<Link to="/about">About</Link>
</p>
<p>
<Link to="/settings">Settings</Link>
</p>
</div>
);


export const About = (props) => (
<Page title="About"/>
);

export const Settings = (props) => (
<Page title="Settings"/>
);

export const Home = (props) => (
<Page title="Home"/>
);

最佳答案

首先,在您的代码片段中,您似乎没有将代码包装在 Router 中,因此您应该确保在 App 或在 ReactDOM.render 中:

import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
rootElement
);

接下来,您的具体问题是您正在渲染react-bootstrap的Nav.Link而不是react-router的Link组件,因此路由器不会接收您的路线改变。幸运的是,react-bootstrap 在其大多数组件中提供了 render prop,如果您不想要默认值,则可以指定要渲染的组件或元素。切换到这样的内容:

import { Switch, Route, Link } from 'react-router-dom';

class Navigation extends Component {
render() {
return (
<div>
<div>
<Navbar>
<Navbar.Brand as={Link} to="/" >React-Bootstrap</Navbar.Brand>
<Navbar.Collapse>
<Nav className="mr-auto">
<NavItem eventkey={1} href="/">
<Nav.Link as={Link} to="/" >Home</Nav.Link>
</NavItem>
</Nav>
<Form inline>
<FormControl type="text" placeholder="Search" className="mr-sm-2" />
<Button variant="outline-success">Search</Button>
</Form>
</Navbar.Collapse>
</Navbar>
</div>
<div>
<Switch>
<Route exact path='/' component={Home} />
<Route render={function () {
return <p>Not found</p>
}} />
</Switch>
</div>
</div>
);
}
}

关于javascript - ReactJS Bootstrap 导航栏和路由不能一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com