反应 history.push 需要 forceRefresh

rea*_*per 4 reactjs redux react-router-v4

我已经根据这篇文章实现了 createBrowserHisotry如何在 react-router v4 上获取历史记录?,但是它只有在我将配置属性设置为 forceRefresh: true 时才会重定向。如果我不设置任何配置属性,则 url 将更改为推送的 url,但页面不会重定向。为什么?

索引文件

import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./components/App";
import { Router } from 'react-router-dom'
import registerServiceWorker from "./registerServiceWorker";
import history from "./components/common/History";

ReactDOM.render(<Router history={history}><App /></Router>, 
document.getElementById('root'));
registerServiceWorker();
Run Code Online (Sandbox Code Playgroud)

历史.JS

import createBrowserHistory from 'history/createBrowserHistory';

// export default createBrowserHistory(); --> This redirects the ### ### URL 
// but does not physically redirect

export default createBrowserHistory({
//pass a configuration object here if needed
forceRefresh: true
});
Run Code Online (Sandbox Code Playgroud)

应用程序JS

class App extends Component {

  render() {
    return (
      <Provider store={store}>
        <OidcProvider store={store} userManager={userManager}>
         <Router>
           <div className="container-fluid">
            <div>
             <Header />
            </div>
           <div>
            <Route exact path="/" render={props => <LoginForm auth={this.auth} {...props} />} />
            <Route exact path="/callback" render={props => <Callback auth={this.auth} {...props} />} />
            <Route exact path="/home" render={props => <HomePage {...props} />} />
            <Route exact path="/table" render={props => <TableContainer {...props} />} />
            <Route exact path="/form/:id" render={props => <FormContainer id={this.props.params.id} {...props} />} />
            <Route exact path="/form" render={props => <FormContainer {...props} />} />
          </div>
          <Footer />
        </div>
      </Router>
    </OidcProvider>
  </Provider>
);
}
}

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

另一个文件调用 history.push

import history from "../components/common/History";

class CallbackPage extends React.Component {
render() {
    // just redirect to '/' in both cases
    return (
        <CallbackComponent
            userManager={userManager}
            successCallback={() => history.push("/home")}
            errorCallback={error => {
                history.push("/");
                console.error(error);
            }}
        >
            <div>Redirecting...</div>
        </CallbackComponent>
    );
   }
}


export default connect()(CallbackPage);
Run Code Online (Sandbox Code Playgroud)

小智 16

用这个:

this.props.history.push('/index');    
this.props.history.go();
Run Code Online (Sandbox Code Playgroud)


Shu*_*tri 1

您的代码中的问题是您正在使用多个 Router 组件。您不需要在 index.js 组件中使用 Router。相反,只需在应用程序中呈现它并提供自定义历史记录

索引.js

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

然后将自定义历史记录作为 prop 传递

  <Router history={history}>
      {/* rest of the code */}
  </Router>
Run Code Online (Sandbox Code Playgroud)

从哪里history进口的common/history.js