【问题标题】:Error: Invariant failed: You should not use <NavLink> outside a <Router> using mbdreact错误:不变量失败:您不应该在使用 mbdreact 的 <Router> 之外使用 <NavLink>
【发布时间】:2019-12-20 01:00:51
【问题描述】:

我正在尝试使用 mbdreact 实现导航栏,但我不断收到此错误:

错误:不变量失败:您不应该在外部使用 &lt;NavLink&gt; &lt;Router&gt;

这是我的代码:

import React, { Component } from "react";
import {
    MDBNavbar, MDBNavbarBrand, MDBNavbarNav, MDBNavItem, MDBNavLink, MDBNavbarToggler, MDBCollapse, MDBDropdown,
    MDBDropdownToggle, MDBDropdownMenu, MDBDropdownItem, MDBIcon
} from "mdbreact";
import { BrowserRouter as Router } from 'react-router-dom';

class NavMenu extends Component {
    state = {
        isOpen: false
    };

    toggleCollapse = () => {
        this.setState({ isOpen: !this.state.isOpen });
    }

    render() {
        return (
            <div>
            <Router>
                <MDBNavbar color="default-color" dark expand="md">
                    <MDBNavbarBrand>
                        <strong className="white-text">Navbar</strong>
                    </MDBNavbarBrand>
                    <MDBNavbarToggler onClick={this.toggleCollapse} />
                    <MDBCollapse id="navbarCollapse3" isOpen={this.state.isOpen} navbar>
                        <MDBNavbarNav left>
                            <MDBNavItem active>
                                <MDBNavLink to="#!">Home</MDBNavLink>
                            </MDBNavItem>
                            <MDBNavItem>
                                <MDBNavLink to="#!">Features</MDBNavLink>
                            </MDBNavItem>
                            <MDBNavItem>
                                <MDBNavLink to="#!">Pricing</MDBNavLink>
                            </MDBNavItem>
                            <MDBNavItem>
                                <MDBDropdown>
                                    <MDBDropdownToggle nav caret>
                                        <div className="d-none d-md-inline">Dropdown</div>
                                    </MDBDropdownToggle>
                                    <MDBDropdownMenu className="dropdown-default">
                                        <MDBDropdownItem href="#!">Action</MDBDropdownItem>
                                        <MDBDropdownItem href="#!">Another Action</MDBDropdownItem>
                                        <MDBDropdownItem href="#!">Something else here</MDBDropdownItem>
                                        <MDBDropdownItem href="#!">Something else here</MDBDropdownItem>
                                    </MDBDropdownMenu>
                                </MDBDropdown>
                            </MDBNavItem>
                        </MDBNavbarNav>
                        <MDBNavbarNav right>
                            <MDBNavItem>
                                <MDBNavLink className="waves-effect waves-light" to="#!">
                                    <MDBIcon fab icon="twitter" />
                                </MDBNavLink>
                            </MDBNavItem>
                            <MDBNavItem>
                                <MDBNavLink className="waves-effect waves-light" to="#!">
                                    <MDBIcon fab icon="google-plus-g" />
                                </MDBNavLink>
                            </MDBNavItem>
                            <MDBNavItem>
                                <MDBDropdown>
                                    <MDBDropdownToggle nav caret>
                                        <MDBIcon icon="user" />
                                    </MDBDropdownToggle>
                                    <MDBDropdownMenu className="dropdown-default">
                                        <MDBDropdownItem href="#!">Action</MDBDropdownItem>
                                        <MDBDropdownItem href="#!">Another Action</MDBDropdownItem>
                                        <MDBDropdownItem href="#!">Something else here</MDBDropdownItem>
                                        <MDBDropdownItem href="#!">Something else here</MDBDropdownItem>
                                    </MDBDropdownMenu>
                                </MDBDropdown>
                            </MDBNavItem>
                        </MDBNavbarNav>
                    </MDBCollapse>
                </MDBNavbar>
                </Router>
                </div>
        );
    }
}

export { NavMenu };

这是我的 package.json

{
  "name": "ICOM.Cbs",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "bootstrap": "^4.3.1",
    "jquery": "^3.4.1",
    "mdbreact": "^4.19.0",
    "react": "^16.8.6",
    "react-async": "^7.0.4",
    "react-dom": "^16.8.6",
    "react-router-bootstrap": "^0.24.4",
    "react-router-dom": "^4.3.1",
    "react-scripts": "^1.1.5",
    "reactstrap": "^6.5.0",
    "recompose": "^0.30.0",
    "rimraf": "^2.6.2",
    "underscore": "^1.9.1",
    "validate-js": "^2.0.1",
    "validate.js": "^0.13.1"
  },
  "devDependencies": {
    "ajv": "^6.0.0",
    "babel-eslint": "^7.2.3",
    "cross-env": "^5.2.0",
    "eslint": "^4.1.1",
    "eslint-config-react-app": "^2.1.0",
    "eslint-plugin-flowtype": "^2.50.3",
    "eslint-plugin-import": "^2.14.0",
    "eslint-plugin-jsx-a11y": "^5.1.1",
    "eslint-plugin-react": "^7.11.1"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "scripts": {
    "start": "rimraf ./build && react-scripts start",
    "build": "react-scripts build",
    "test": "cross-env CI=true react-scripts test --env=jsdom",
    "eject": "react-scripts eject",
    "lint": "eslint ./src/"
  }
}

我不知道为什么我总是遇到这个问题。我已经尝试将 react-router dom 降级到 4.3.1,但它并没有解决问题。

有什么想法吗?

【问题讨论】:

  • &lt;BrowserRouter&gt; 应该在根级别组件,这显然不是,并且您正在尝试在 &lt;BrowserRouter&gt; 上下文之外使用 &lt;NavLink/&gt; 组件。
  • @tarzenchugh:我已经从他们的网站上复制了这段代码。但是现在我尝试将 BrowserRouter 放在我的 index.js 文件中,但我仍然得到同样的错误。

标签: javascript reactjs react-router mdbootstrap


【解决方案1】:

我在实现 mdb 仪表板时遇到了同样的问题,在我的例子中,将“react-router-dom”版本更新为“5.2.0”,解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2020-02-04
    • 2021-08-31
    • 2021-06-19
    • 2020-08-04
    • 2019-08-28
    • 2020-09-03
    相关资源
    最近更新 更多