react-router 没有渲染任何东西

react-router is not rendering anything

我使用 create-react-app 创建了我的应用程序并尝试在其上使用 react-router。但它根本不起作用。

这是我的 Header.js

  import React, { Component } from 'react';

class Header extends Component {
    render() {
        return (
          <nav>
                <div className="nav-wrapper blue darken-1">
                    <a className="brand-logo center">Testing</a>

                    <div className="right">
                        <ul>
                            <li>
                                <a><i className="material-icons">vpn_key</i></a>
                            </li>
                            <li>
                                <a><i className="material-icons">lock_open</i></a>
                            </li>
                        </ul>
                    </div>
                </div>
            </nav>
        );
    }
}

export default Header;

我的App.js.

import React, { Component } from 'react';
import Header from './Header';

class App extends Component {
  render() {
    return (
      <div className="App">
        <div className="Header">
        <Header />
        {this.props.children}
        </div>
      </div>
    );
  }
};

export default App;

还有我的 index.js 这里。

import React from 'react';
import ReactDOM from 'react-dom';
import { Router, Route, browserHistory, IndexRoute } from 'react-router';
import App from './App';
import Home from './Home';
import Login from './Login';
import Register from './Register';

ReactDOM.render((
  <Router history={browserHistory}>
        <Route path="/" component={App}>
            <IndexRoute component={Home}/>
            <Route path="/home" component={Home}/>
            <Route path="/login" component={Login}/>
            <Route path="/register" component={Register}/>
        </Route>
    </Router>),
  document.getElementById('root')
);

我是不是做错了什么?

Ho 如果你是 react-router 的 v4* 它不会那样工作你应该安装 react-router-dom 并导入它。

我就是这样做的

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


//modified code of yours
ReactDOM.render((
     <BrowserRouter>
       <div>
         <Route path="/" component={App}>
           <IndexRoute component={Home}/>
           <Route path="/home" component={Home}/>
           <Route path="/login" component={Login}/>
           <Route path="/register" component={Register}/>
         </Route>
      </div>
    </BrowserRouter>),
    document.getElementById('root'));

注意:不要忘记将路由包装在包装器中,否则会抛出错误!

要设置 404 页面,只需提供另一条没有任何路径的路由 it.If 找不到任何路由,它将被渲染。

<Route component={FourOhFour} /> /* FourOhFour component as 404*/

** 奖励积分 如果你是 react-router 的新手,你可能会遇到同时渲染多条路由的问题。但是您一次只想渲染一条路线。此时。

/*Import Switch also*/
import {BrowserRouter, Route, Switch} from 'react-router-dom';

然后

/*Wrap your route with `Switch` component*/
<BrowserRouter>
    <div>
        <Switch>
            <IndexRoute component={Home}/>
            <Route path="/" component={App}/>
            <Route path="/home" component={Home}/>
            <Route path="/login" component={Login}/>
            <Route path="/register" component={Register}/>
         </Switch>
    </div>
</BrowserRouter>

如果您正在使用 React Router 4,如其他评论所述,您必须使用 'react-router-dom' 才能将其导入组件。

import { BrowserRouter as Router } from 'react-router-dom'

您现在可以将任何组件作为 Router 的子组件(它必须是单个节点)。

与普通RR2-3的主要区别在于,现在每条路线都是一个简单的组件,您可以将其与其他组件放在一起。

您不再有 IndexRoute,只需按您想要的顺序放置路由即可:

<div>
  <Header />
  <Route path="/blabla/:bla" component={SingleBlaBla} />
  <Route path="/aboutUs" exact component={AboutUs} />
  <Route path="/" exact component={Home} />
  <Footer />
</div>

Route 的选项、Switch、Redirect 和其他非常有用的组件的使用,有很多东西需要了解。尝试花一些时间在一些好的文档上,因为它是一个非常好的版本,它会保留一段时间。

如果你能看看这个精彩的介绍:https://egghead.io/courses/add-routing-to-react-apps-using-react-router-v4

和文档网站:https://reacttraining.com/react-router/

正确的格式是

import React from 'react';
import { BrowserRouter as Router, Routes, Route,  } from "react- 
router-dom";
import './App.css';
import Home from './components/Pages/Home';

function App() {
return (
 <>
 <Router>
    <Routes>
    <Route exact path='/' element={<Home/>}/>
    </Routes>
  </Router>
 </>
)} 
export default App;