React history.push()正在更新url但不在浏览器中导航到它

Joh*_*ohn 42 history.js react-router-v4

到目前为止,我已经阅读了很多关于react-router v4和npm历史库的内容,但似乎没有人帮助我.

我的代码按预期运行,直到它应该导航并在使用history.push()方法更改url时执行简单的重定向.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>
      )
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 47

您不需要降级到v3,React-Router 4.0.0完全能够完成OP要求的内容.

const history = createBrowserHistory();
Run Code Online (Sandbox Code Playgroud)

是一个自定义历史对象,所以你应该使用<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 />
       )
   }
}
Run Code Online (Sandbox Code Playgroud)

一旦您的自定义历史记录对象通过路由器的历史记录支持传递,history.push应该在您的应用程序的任何位置正常工作.(您可能希望将历史记录对象放在历史记录配置文件中,并将其导入到要以编程方式路由的位置).

有关详细信息,请参阅:React Router历史记录对象

  • 哇谢谢你!这是我见过的唯一一个解释在使用历史数据包时需要使用`<Router />`而不是`<BrowserRouter />`的答案. (7认同)
  • 这是我在过去4天搜索中找到的最正确的解决方案 (2认同)
  • 非常感谢,历史记录现在可以与 &lt;Router&gt; 一起使用,但基本名称停止在其中工作。在 &lt;BrowserRouter&gt; 中,基本名称有效,但历史记录无效:-( (2认同)

Art*_*lho 17

检查您是否没有嵌套的BrowserRouter标记.

我在react-router v4上遇到了这个问题,但我在更改应用程序之后解决了它,只将BrowserRouter设置为最高级别,如下例所示.

ReactDOM.render(
  <BrowserRouter >
    <App />
  </BrowserRouter>,
  document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

  • 我有同样的问题,但仍然没有解决方案 (2认同)

Cha*_*wki 6

Router从不导入react-router-domBrowserRouter

// index.js

    import React from "react";
    import ReactDOM from "react-dom";
    import App from "./App";
    import { Router } from "react-router-dom";
    import history from './utils/history'


    ReactDOM.render(
      <Router history={history}>
        <App />
      </Router>,
      document.getElementById("root"));

    serviceWorker.register();


// history.js 

import { createBrowserHistory } from 'history';

export default createBrowserHistory();
Run Code Online (Sandbox Code Playgroud)

在您需要导航导入历史记录和推送的其他组件上

import History from '../utils/history'

History.push('/home')

Run Code Online (Sandbox Code Playgroud)


小智 5

渲染这将在路线更改时刷新

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

反应路由器-dom:4.2.2


Anu*_*lot 5

请确保您正在使用

const history = createBrowserHistory({forceRefresh:true});
Run Code Online (Sandbox Code Playgroud)

不是

const history = createBrowserHistory();
Run Code Online (Sandbox Code Playgroud)

添加“{forceRefresh:true}”后,我能够更新页面

  • 它重新加载整个页面我想这不是预期的 bahviour (8认同)