我正在try 使用React JS创建一个简单的Webapp,我想使用React Bootstrap提供的Navbar.

我创建了一个包含Navigation类的Navigation.js文件,将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;

我试着使用NavItem,其中包含react-router-bootstrap中的LinkContainer,得到了同样的结果.

为了完整起见,佩奇.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来包装你的代码,所以你应该确保你是在AppReactDOM.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>
    );
  }
}

Reactjs相关问答推荐

Shadck/ui Select -当用户 Select 项目时更改状态

react 下拉菜单任务

如何创建react router v6的自定义子路由?

在Reaction常量函数中未更新状态变量

在url中使用MongoDB对象ID被认为是不好的做法?

在reactjs中刷新页面时丢失状态值

如何在Next.js应用程序中为路由[slug]生成.html文件?

如何测试使用 React.createportal 呈现的组件?

需要先填写依赖输入字段,以便其他人工作

React - 错误边界未捕获错误

单击按钮或文本从一个组件移动到另一个组件

在 Spring Cloud Gateway 中运行的 React SPA 页面刷新出现白标错误

错误:无效挂钩调用.钩子只能在函数组件的主体内部调用.使用 next/router 时

如何不旋转 mui 自动完成弹出图标?

在状态中存储多个选定的选项

下拉菜单在 AppBar 中未正确对齐

ClearInterval 在 React 中的 useRef 没有按预期工作

在渲染不显示子元素之后,再次渲染时,子元素状态数据完全消失了.为什么会这样以及如何防止它发生?

在 Nextjs 中使用 useEffect 随机化一个数组

React-Native PDF 注释