2017-10-15 2 views
1

アプリ内ルートに常にリダイレクトしている場合、Redirectの反応ルータドーム(v4)のコンポーネントとthis.props.history.push()の違いは何ですか?Reactでは、this.props.history.pushを使用するより常にリダイレクトをレンダリングする方が良いですか?

など。ユーザーが指定したタイトルをURLに追加し、/foo/123から/foo/123/some-title(いずれも同じRoute /コンポーネントで表示されます)にリダイレクトしたいとします。

私はRedirectの状態で渡します。これはどこに終わるのですか?

状態にリダイレクトする場所を指定するのは反パターンですか?なぜ、このようなコード例を見ない:それはあなたが、それはいくつかを提供しませんがページを変更するためにコンポーネントをレンダリングするために持っていることを一種の直感に反するよう

save() { 
    this.setState({ redir: '/new-path'; }); 
} 
... 
render() { 
    if (this.state.redir) { 
    return <Redirect to={this.state.redir} />; 
    } 
    ... 
} 

答えて

0

は、私は、レンダリングリダイレクトに対して厳しくている人います明確なメリット

あなたは上記の例ではリダイレクト

Component A # the one Rendered by the Route 
    Component B 
    Component C# the one triggering the redirect 

をトリガしている子コンポーネントを扱っているとき、あなたからのルートの小道具を伝承と勤勉されない限りthis.props.history.push()の問題は、ほとんどがありますComponent AダウンComponent Cに、あなたは何人かの人々がちょうどアイデアを好まない反応し、ルータのメンテナによって提供されたが、そのシナリオに対する答えになるはずだったRedirectをレンダリングComponent C

history.push()を使用することはできませんまったく(私を含む)。


がFunctioanally話すリダイレクトは、ボンネットの下にそれを使用して、Redirecthistory.push間の機能に大きな違いがあるように思えるdoes notの。 history.pushよりもRedirectを使用する主な理由は、履歴がどのように動作するか、または後で別の方法でコンテキストを処理することを決定した場合に、Redirectが将来の可能性のある変更から保護されていることです。

+1

あなたのコンポーネントを 'withRouter'でラップすることで、任意のレベルの階層でルータのpropsにアクセスすることができます –

+0

@ShubhamKhatri true、HOCとして' withRouter'を使用したコンポーネントがプッシュだけの履歴を使用する限り、問題ではない。私の場合、私は 'withRouter'を使ったコンポーネントから' match'にアクセスしようとしました。私が望む結果を得られませんでした。 – Maru

+0

リダイレクトはhistory.pushをフードの下で使用しますか?理想的な行動の違いを知りたい。 –

関連する問題