Last active
February 21, 2019 14:21
-
-
Save ajl100b/51970eb09e59421a6c431f0c9f67b2eb to your computer and use it in GitHub Desktop.
Redirect to search results component upon submit of search terms from search bar embedded in a global navbar
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React, { Component } from 'react' | |
import { Redirect } from 'react-router' | |
export default class Search extends Component { | |
constructor () { | |
super(); | |
this.state = { | |
fireRedirect: false | |
} | |
} | |
componentWillRecieveProps(nextProps) { | |
this.setState({ fireRedirect: false }) | |
} | |
submitForm = (e) => { | |
e.preventDefault() | |
this.setState({ fireRedirect: true }) | |
} | |
render () { | |
const { fireRedirect } = this.state | |
return ( | |
<div> | |
<form onSubmit={this.submitForm}> | |
<button type="submit">Submit</button> | |
</form> | |
{fireRedirect && ( | |
<Redirect to='/search-results'/> | |
)} | |
</div> | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Problem here is that react router doesn't replace component all the time.
So your Result component, or wherever you are redirecting, is rendered once, for the first time only.
To trigger changes on that Result component you should implement componentDidUpdate() method in Result component, with some code and logic that will trigger re-rendering.
For me solution was something like this
location.search is search query from input
It's set in Redirect component
<Redirect to={{pathname: '/search-results'/, search: '?term=' + this.state.term}}>
or in history.push on submitForm