无法在反应路由器中渲染反应组件

时间:2018-09-17 06:51:52

标签: javascript reactjs react-router

我有一个应聘申请。

我在布线组件时遇到问题

index.js

import React from "react";
import ReactDOM from "react-dom";

import App from './app';

ReactDOM.render(
  <App/>,
  document.getElementById("root")
);

app.jsx

我在这里路由2组件。登录名和主要组件。在主要组件中,有许多路由器将用于仪表板。

我的问题:在<Switch>中,第一个<Route>可以渲染,但是如果我在url中进行硬编码,则不能从第二个路由器渲染

  

http://localhost:3000/#/login ==渲染

     

http://localhost:3000/#/main =未呈现

import React, { Component } from 'react';
import {
    BrowserRouter as Router,
    Route,
    Link,
    Switch
} from 'react-router-dom';

import Login from './login';
import Main from './main';

import createBrowserHistory from 'history/createBrowserHistory';
const customHistory = createBrowserHistory();

class App extends Component {
    constructor(props) {
        super(props);

        window.token = '';
    }

    render() {
        return <div>
                <Router>
                    <Switch>
                        <Route to="/login" component={Login} exact />
                        <Route to="/main" component={Main} exact/>
                    </Switch>
                </Router>
            </div>;
    }
}

export default App;

main.jsx

import React, {Component} from 'react';
import ReactDOM from "react-dom";

import { HashRouter, Route, Switch } from "react-router-dom";

import indexRoutes from "routes/index.jsx";

import "bootstrap/dist/css/bootstrap.min.css";
import "./assets/css/animate.min.css";
import "./assets/sass/light-bootstrap-dashboard.css?v=1.2.0";
import "./assets/css/demo.css";
import "./assets/css/pe-icon-7-stroke.css";

import Login from './login';

class Main extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return <HashRouter>
        <Switch>

          {indexRoutes.map((prop, key) => {
            return <Route to={prop.path} component={prop.component} key={key} />;
          })}
        </Switch>
      </HashRouter>;
    }
}

export default Main;

4 个答案:

答案 0 :(得分:3)

使用

<Route path="/login" component={Login} exact />

使用to代替path

答案 1 :(得分:1)

<Route path="/login" component={Login} /> <Route path="/main" component={Main} exact/>

使用由 To

插入的 Path

答案 2 :(得分:0)

请勿在主路线中使用确切属性,如下所示。

class App extends Component {
  render() {
    return <div>
            <Router>
                <Switch>
                    ...
                    <Route to="/main" component={Main} />
                </Switch>
            </Router>
        </div>;
  }
}

答案 3 :(得分:0)

您的代码有两个问题

首先在您的app.jsx文件中

<Switch>
  <Route 
   to="/login"       // <== should be path="/login"
   component={Login} 
   exact
   />
  <Route 
   to="/main"        // <== should be path="/main" 
   component={Main} 
   exact             // <== remove exact prop for the nested routes to work
   /> 
</Switch>

to道具实际上属于<Link/>提供的react-router组件,而不是<Route />组件,它应该是path道具。
如果要在<Route />组件中渲染子路线,则我们永远不要在父exact组件上使用<Route /> prop。

第二次在您的main.jsx文件中:

  indexRoutes.map((prop, key) => {
    return (
     <Route 
       to={prop.path} // <== should be path={prop.path}
       component={prop.component} 
       key={key} />;
     );
  })

重新将to道具更改为path道具。