react-router go back a page how do you configure history?

前端 未结 21 1157
说谎
说谎 2020-11-30 18:30

Can anyone please tell me how I can go back to the previous page rather than a specific route?

When using this code:

var BackButton = React.createCla         


        
相关标签:
21条回答
  • 2020-11-30 18:54

    What worked for me was to import withRouter at the top of my file;

    import { withRouter } from 'react-router-dom'
    

    Then use it to wrap the exported function at the bottom of my file;

    export default withRouter(WebSitePageTitleComponent)
    

    Which then allowed me to access the Router's history prop. Full sample code below!

    import React, { Component } from 'react'
    import { withRouter } from 'react-router-dom'
    
    import PropTypes from 'prop-types'
    
    class TestComponent extends Component {
      constructor(props) {
        super(props)
        this.handleClick = this.handleClick.bind(this)
      }
    
      handleClick() {
        event.preventDefault()
        this.props.history.goBack()
      }
    
      render() {
        return (
          <div className="page-title">
            <a className="container" href="/location" onClick={this.handleClick}>
              <h1 className="page-header">
                { this.props.title }
              </h1>
            </a>
          </div>
        )
      }
    }
    
    const { string, object } = PropTypes
    
    TestComponent.propTypes = {
      title: string.isRequired,
      history: object
    }
    
    export default withRouter(TestComponent)
    
    0 讨论(0)
  • 2020-11-30 18:56
    this.context.router.goBack()
    

    No navigation mixin required!

    0 讨论(0)
  • 2020-11-30 18:57

    I think you just need to enable BrowserHistory on your router by intializing it like that : <Router history={new BrowserHistory}>.

    Before that, you should require BrowserHistory from 'react-router/lib/BrowserHistory'

    I hope that helps !

    UPDATE : example in ES6

    const BrowserHistory = require('react-router/lib/BrowserHistory').default;
    
    const App = React.createClass({
        render: () => {
            return (
                <div><button onClick={BrowserHistory.goBack}>Go Back</button></div>
            );
        }
    });
    
    React.render((
        <Router history={BrowserHistory}>
            <Route path="/" component={App} />
        </Router>
    ), document.body);
    
    0 讨论(0)
  • 2020-11-30 18:58

    Check out my working example using React 16.0 with React-router v4 Live Example. check out the code Github

    Use withRouter and history.goBack()

    This is the idea I am implementing...

    History.js

    import React, { Component } from 'react';
    import { withRouter } from 'react-router-dom'
    import './App.css'
    
    
    class History extends Component {
    
      handleBack = () => {
        this.props.history.goBack()
      }
    
      handleForward = () => {
        console.log(this.props.history)
        this.props.history.go(+1)
      }
    
      render() {
        return <div className="container">
          <div className="row d-flex justify-content-between">
            <span onClick={this.handleBack} className="d-flex justify-content-start button">
              <i className="fas fa-arrow-alt-circle-left fa-5x"></i>
            </span>
            <span onClick={this.handleForward} className="d-flex justify-content-end button">
              <i className="fas fa-arrow-alt-circle-right fa-5x"></i>
            </span>
          </div>
        </div>
      }
    }
    
    export default withRouter(History)
    

    PageOne.js

    import React, { Fragment, Component } from 'react'
    
    class PageOne extends Component {
    
       componentDidMount(){
          if(this.props.location.state && this.props.location.state.from != '/pageone')
          this.props.history.push({
             pathname: '/pageone',
             state: { 
                 from: this.props.location.pathname
             }
           });
       }
    
       render() {
          return (
             <Fragment>
                <div className="container-fluid">
                   <div className="row d-flex justify-content-center">
                      <h2>Page One</h2>
                   </div>
                </div>
             </Fragment>
          )
       }
    }
    
    export default PageOne
    

    p.s. sorry the code is to big to post it all here

    0 讨论(0)
  • 2020-11-30 18:59

    This works with Browser and Hash history.

    this.props.history.goBack();
    
    0 讨论(0)
  • 2020-11-30 19:01
    1. import withRouter

      import { withRouter } from 'react-router-dom';
      
    2. Export your component as:

      export withRouter(nameofcomponent) 
      
    3. Example, on button click, call goBack:

      <button onClick={this.props.history.goBack}>Back</button>
      

    Tested on react-router-dom v4.3

    0 讨论(0)
提交回复
热议问题