2017-12-23 19 views
2

に反応:私の検索バーのレンダリングコンポーネントの一部としてはバックリダイレクトタグから行く - 私は検索バーを作成し、私は私の検索バーは、このような私の検索結果にリンクされている、現在ルータ

render() { 
if (this.props.itemsFetchSuccess) { 
    return (
    <Redirect to={{ 
     pathname: '/search', 
     search: `?item-name=${this.props.searchQuery}` 
    }} /> 
); 

GOOGLE CHROME MAIN - > MAIN LANDING - > SEARCH RESULTS。

React-Router v4でリダイレクトタグを使用したため、ブラウザの履歴スタックに追加していないと思われます。検索結果ページからブラウザを押すと、以前のページ(メインランディング)に戻ることはありませんが、メインランディング前のページに戻ります。

リンクタグを使用してみましたが、リンクが生成されて検索結果が完了しても実際にはリダイレクトされないため、この方法を使用するとよい方法はありません。

ありがとうございました!

+0

私はあなたには十分理解しているかどうかは不明ですが、おそらく 'window.location.href'が答えになるでしょうか? – TamirNahum

+0

私が意味するのは、検索バーをクリックすると、APIのデータを要求するためにredux呼び出しが行われ、終了時にロードされるということです。しかし、私は同じ "パス名、検索フィールド"を維持するためにルーティングが必要なので、私はリダイレクトタグなしでそれを行うための別の方法を見つけようとしています – efxgamer

答えて

1

Redirecthistory stackの現在のエントリを上書きしますので、あなたは履歴スタック上の現在の場所に移動することができません。

は、あなたが代わりにプログラム的componentWillReceiveProps機能でhistory.push()を使用してナビゲートすることができ、そのdocumentation

を参照してください。

componentWillReceiveProps(nextProps) { 
    if(nextProps.itemsFetchSuccess !== this.props.itemsFetchSucess && nextProps.itemsFetchSuccess) { 
     this.props.history.push({ 
       pathname: '/search', 
       search: `?item-name=${nextProps.searchQuery}` 
     }) 
    } 
} 

P.S. history.pushを使用しているコンポーネントが、接続されているコンポーネントかwithRouterを使用して、Router propsを受信して​​いることを確認します。 how to programmatically navigate using React-router

1

これを試してみてください:

this.props.history.push(`/search?item-name=${this.props.searchQuery}`); 
関連する問題