История реакций.push () обновляет url, но не переходит к нему в браузере

Я прочитал много вещей о react-router v4 и библиотеке истории npm до этого момента, но никто, похоже, не помогает мне.

мой код работает так, как ожидалось, до момента, когда он должен перемещаться и выполнять простое перенаправление при изменении url-адреса с помощью истории.метода push (). URL-адрес изменяется на указанный маршрут, но не выполняет перенаправление при нажатии кнопки. Заранее спасибо, все еще учимся реагировать-маршрутизатор...

Я хотел бы для нажмите кнопку, чтобы сделать простой перенаправление без {forceRefresh:true}, который затем перезагружает всю страницу.

import React from 'react';
import createBrowserHistory from 'history/createBrowserHistory';

const history = createBrowserHistory({forceRefresh:true});

export default class Link extends React.Component {
  onLogout() {
    history.push("/signup");
  }
  render() {
      return(
        <div>
          <h1>Your Links</h1>
          <button onClick={this.onLogout.bind(this)}>Log Out</button>
        </div>
      )
  }
}

4 ответов


проверьте, нет ли у вас вложенных тегов BrowserRouter.

У меня была эта проблема на react-router v4, но я решил ее после изменения приложения, чтобы иметь только BrowserRouter на самом верхнем уровне, как пример ниже.

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

вам не нужно переходить на v3, React-Router 4.0.0 полностью способен выполнить то, что просит OP.

const history = createBrowserHistory();

является пользовательским объектом истории, поэтому вы должны использовать <Router> синхронизировать его с react-router вместо <BrowserRouter>, что я и предполагал, что вы использовали.

попробуйте это вместо этого:

import React, {Component} from 'react';
import { Router } from 'react-router';
import { Route } from 'react-router-dom';
import createHistory from 'history/createBrowserHistory';

const history = createHistory();   

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

   render(){
       return (
           <Router history={history}>   //pass in your custom history object
                <Route exact path="/" component={Home} />
                <Route path="/other" component={Other} />
           <Router />
       )
   }
}

после того, как ваш пользовательский объект истории передается через историю prop маршрутизатора, история.толчок должен работать в любом месте ваше приложение. (возможно, вы захотите поместить объект истории в файл конфигурации истории и импортировать его в места, где вы хотите маршрутизировать программно).

подробнее: React объект истории маршрутизатора


рендеринг это обновит при изменении маршрута

 `ReactDOM.render(
    <AppContainer>
      <BrowserRouter children={routes} basename={baseUrl} forceRefresh={true}/>
    </AppContainer>,
    document.getElementById("react-app")
  );`

react-router-dom: 4.2.2


у меня такая же проблема.

после некоторого поиска я нашел это react-проблема маршрутизатора

в настоящее время я понизил react-router до v3, и я использую browserHistory с react-router пакет, и он работает нормально.