javascript - React router redirect outside of route component - Stack Overflow

I use React Router in my React application.In Header ponent that isn't inside Router ponent i wan

I use React Router in my React application. In Header ponent that isn't inside Router ponent i want to redirect user after register a form, but because Header ponent is outside of Router ponent i can't use this.props.history.push('/');. How can i redirect user in Header ponent? This is my App ponent:

<div>
    <Header order={this.order}/>
    <Router data={this.state.data}>
      <div>
        <Menu data={this.state.data}/>
        <Route exact path="/" ponent={Home} />
        <Route exact path="/post" ponent={PostList} />
        <Route path="/showpost/:slug" ponent={ShowPost} />
        <Route path="/page/:slug" ponent={ShowPage} />
        <Route path="/login" ponent={Login} />
        <Route path="/register" ponent={Register} />
        <Route path="/forgotpassword" ponent={Forgot} />
        <Route path="/password/reset/:token" ponent={Reset} />
        <Route path="/logout" ponent={Logout} />
        <Route path="/user" ponent={User} />
        <Route path="/saveorder" render={()=><SaveOrder data={this.state.data}/>} />
      </div>
    </Router>
    <Map />
    <Footer />
  </div>

I use React Router in my React application. In Header ponent that isn't inside Router ponent i want to redirect user after register a form, but because Header ponent is outside of Router ponent i can't use this.props.history.push('/');. How can i redirect user in Header ponent? This is my App ponent:

<div>
    <Header order={this.order}/>
    <Router data={this.state.data}>
      <div>
        <Menu data={this.state.data}/>
        <Route exact path="/" ponent={Home} />
        <Route exact path="/post" ponent={PostList} />
        <Route path="/showpost/:slug" ponent={ShowPost} />
        <Route path="/page/:slug" ponent={ShowPage} />
        <Route path="/login" ponent={Login} />
        <Route path="/register" ponent={Register} />
        <Route path="/forgotpassword" ponent={Forgot} />
        <Route path="/password/reset/:token" ponent={Reset} />
        <Route path="/logout" ponent={Logout} />
        <Route path="/user" ponent={User} />
        <Route path="/saveorder" render={()=><SaveOrder data={this.state.data}/>} />
      </div>
    </Router>
    <Map />
    <Footer />
  </div>
Share Improve this question asked May 21, 2018 at 11:45 zenithzenith 651 gold badge1 silver badge9 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 3

You can use this.props.history.push('/') if your Header ponent is passed to the withRouter HOC. withRouter allows you to get history in ponent props.

So... in Header ponent you should import withRouter HOC

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

and export your Header ponent like this:

export default withRouter(Header);

You can find more info about programmatic navigation here https://tylermcginnis./react-router-programmatically-navigate/

an example of what you want to do is found at the end of the post :)

move Header inside Router, only the ponent that are inside <Router> that can use any of react-router's apis.

the code would look like this:

  <div>
    <Router data={this.state.data}>
      <div>
        <Header order={this.order} />
        <Menu data={this.state.data} />
        <Route exact path="/" ponent={Home} />
        <Route exact path="/post" ponent={PostList} />
        <Route path="/showpost/:slug" ponent={ShowPost} />
        <Route path="/page/:slug" ponent={ShowPage} />
        <Route path="/login" ponent={Login} />
        <Route path="/register" ponent={Register} />
        <Route path="/forgotpassword" ponent={Forgot} />
        <Route path="/password/reset/:token" ponent={Reset} />
        <Route path="/logout" ponent={Logout} />
        <Route path="/user" ponent={User} />
        <Route
          path="/saveorder"
          render={() => <SaveOrder data={this.state.data} />}
        />
      </div>
    </Router>
    <Map />
    <Footer />
  </div>

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744258893a4565532.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信