React Router 4.1.1 не отображается, когда я нажимаю «Ссылка»

Я просто пытаюсь щелкнуть компонент и отреагировать на повторную визуализацию того, что необходимо для визуализации. Но я просто не могу это заархивировать. Это то, что у меня есть до сих пор:

Index.js (здесь я пытался хранить все свои маршруты)

import React from "react";
import ReactDOM from "react-dom";
import Main from "./pages/index/main.js";
import Login from "./pages/signin/signin.js";
import { BrowserRouter as Router, Route, Switch} from "react-router-dom";
ReactDOM.render(
  <div>
    <Router>
      <Switch>
        <Route exact  path="/" render={()=> <Main />}/>
        <Route path="/login" render={()=> <Login />}/>
      </Switch>
    </Router>
  </div>,
  document.getElementById("root")
);

Header.JS (где у меня настроены теги ссылок)

import React from "react";
import style from "./../acc/css/navbar.css";
import { BrowserRouter as Router, Link} from "react-router-dom";
export default class Header extends React.Component {
    render() {
        return (
            <Router>
    <section className={style.nav} id="nav">
            <ul>
        <li><Link to="/">Home</Link></li>
        <li><Link to="/login">Login</Link></li>
            </ul>
        </section>
        </Router>
        );
    }
}

На данный момент, когда я вручную перехожу к /, он отображает компонент Main, а когда я вручную перехожу к /login, он отображает компонент Login.

Однако, когда я нажимаю на компонент <Link>, он не отображается, он просто меняет URL-адрес на /login или наоборот.

Мне было интересно, есть ли какое-либо решение этой проблемы?

Изменить 1

Код main.js

import React from "react";
//import compunts
import Header from "./../header.js";
import Qoute from "./qoute.js";
import Grades from "./grades.js";

export default class Main extends React.Component {
    render() {
        return (
      <div id="continor">
                <Header />
                <Qoute />
                <Grades />
            </div>
        );
    }
}

Вход.js

    import React from "react";
    import Header from "./../header.js";
    import Qoute from "./qoute.js";
    import Form from "./form.js";
    export default class Login extends React.Component {
        render() {
            return(
          <div>
          <Header />
            <section id="info">
              <div className="containor">
                <div className="row">
                  <Qoute />
                  <Form />
                </div>
              </div>
            </section>
          </div>
            );
        }
    }

Для уточнения я попробовал

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

и это все еще не работает. Любые решения?


person Mohammed    schedule 07.05.2017    source источник
comment
Можешь попробовать <Route exact path="/" component={Main}/>   -  person Shubham Khatri    schedule 08.05.2017
comment
те же результаты :(   -  person Mohammed    schedule 08.05.2017
comment
Кстати, вам нужно только один раз определить Router в родительском компоненте. Также вместо render={()=› ‹Login /›} в ваших маршрутах используйте component={Home}. Можете ли вы включить код для вашего основного и домашнего компонентов, пожалуйста?   -  person colemerrick    schedule 08.05.2017
comment
Я пробовал это до того, как сделал рендеринг только тогда, когда где-то увидел ответ, в котором говорилось, что оба решения не работают. Я отредактирую свой вопрос и включу основной компонент и компонент входа. Я не уверен, что вы подразумеваете под домашним компонентом!   -  person Mohammed    schedule 09.05.2017
comment
Некоторые компоненты блокируют обновления. Если вы используете react-redux или React.PureComponent, вы должны использовать withRouter() для распространения обновлений. Документация: github.com/ ReactTraining/react-router/blob/master/packages/ github.com/ReactTraining/react-router/blob/master/packages/ Связанный вопрос: stackoverflow.com/questions/44823590/   -  person ErikWi    schedule 30.06.2017


Ответы (2)


Теперь у вас есть <Link> элементов внутри тега <Router>. Вы должны удалить этот <Router>, и ссылки начнут работать.

person Kamil Naja    schedule 30.05.2018

Попробуйте изменить свой Header.js как,

import React from "react";
import style from "./../acc/css/navbar.css";
import { BrowserRouter as Router, Link} from "react-router-dom";
export default class Header extends React.Component {
    render() {
        return (
    <section className={style.nav} id="nav">
            <ul>
        <li><Link to="/">Home</Link></li>
        <li><Link to="/login">Login</Link></li>
            </ul>
        </section>
        );
    }
}

И нажмите на ссылку, которую он показывает.

person Rohith Murali    schedule 30.05.2018