React-Router-Dom Нет эффекта при нажатии <Link> - PullRequest
0 голосов
/ 24 сентября 2018

В настоящее время у меня проблема с моей панелью навигации.Когда я нажимаю на него, он даже не меняет URL-адрес.

Примечание. Я просто использую последнюю версию react и react-router-dom": ^4.4.0-alpha.1.Здесь нет лишнего.

Вот это index.js

 import React from 'react';
 import ReactDOM from 'react-dom';
 import App from './components/App';
 import './index.scss'
 import { BrowserRouter as Router } from 'react-router-dom'

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

Вот мой App.js Я много вырезал для краткости.

 import React, { Component } from "react";
 import { Route, Switch } from "react-router-dom";
 import Home from "./Home";
 import Form from "./Form";
 import Navigation from "./Navigation";
 import About from "./About";

 class App extends Component {
   constructor(props) {
     super(props);
       this.state = {
          isLoggedIn: null
      };
     }

    render(props) {
     return (
      <div>
      <Navigation
      {...props}
        isLoggedIn={this.state.isLoggedIn}
       />
       <Switch>
        <Route exact path="/" component={Home} />
         <Route
           path="/about"
           render={() => {
            return <About />;
            }}
           />
          <Route 
            path="/story/create" 
            render={(props )=> {
            return <Form {...props} />;
            }} 
           />
         </Switch>
       </div>
      );
     }
    }

  export default App;

И наконец, мой Navigation.js

 import React from "react";
 import { Link } from "react-router-dom";
 import Login from './Login'
 import { Tab, Tabs } from "react-materialize";

 export default function Navigation(props) {
  const isLoggedIn = props.isLoggedIn;
   let loggedState;
   if (isLoggedIn) {
   loggedState = (
  <div>
    <Tab title="Profile">
    <Link to="/user/:id/profile">
      Profile
    </Link>
    </Tab>

    <Tab title="Log Out">
     <Link to="/logout" onClick={props.handleLogOut}>
        Log Out

    </Link>
    </Tab>
  </div>
);
} else {
loggedState = (
  <Tab title="Login">
  <Login
   isLoggedIn={props.isLoggedIn}
   handleLogIn={props.handleLogIn}
  />
  </Tab>
  );
  }
    return (
  <Tabs className="">
    <Tab title="Home">
     <Link to="/">
      Home
      </Link>

     </Tab>
  <Tab title="All Stories">
  <Link to="/all_stories">
    All Stories
  </Link>
  </Tab>
  <Tab title="Write a Story">
  <Link to="/story/create">
    Write A Story
  </Link>
  </Tab>
  {loggedState}
</Tabs>
 )}

Я думаю, что было бы полезно упомянуть, что эта проблема относится только к моему компоненту navbar (функциональному).У меня <Link> ссылки на другие страницы в моем приложении, они прекрасно работают, только эта проблема создает проблему.

Первоначально я думал, что это потому, что я не использовал withRouter, но после просмотра StackOverflow кажется, что это необходимо только при использовании react-redux.

У меня также есть, считается понижением react-router-dom, но я не смог найти других сообщений по этому вопросу, в которых упоминается об этом.Кажется, что большинство других имеют эту проблему только потому, что они не сделали Route exact path="/", но я думаю, что, как я сделал, он все равно должен работать правильно.

Большое спасибо заранее.

1 Ответ

0 голосов
/ 24 сентября 2018

Возможно, вы сталкиваетесь с этой проблемой, потому что есть прослушиватель событий click с добавлением event.preventDefault() к .tab или .tabs.Вы можете исправить это, воспользовавшись одним из следующих способов:

  • переместить Link s за пределы .tab / .tabs
  • , избавиться от preventDefault или удалить вкладкиeventListener сам
  • вместо этого используйте компонент табуляции (например, Reaction-Tabs )

Кстати, я не вижу необходимости в tabsв вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...