質問: ### 前提・実現したいこと 例えばユーザの詳細ページ`UserDetail`(URL:`/user/:user_name`)があったとします。このURLへアクセスしたとき、動的にjavascriptで該当ユーザの情報を取得します。この際の取得のリクエストにて404が起きたときに、404用の`NotFoundPage`にリダイレクトして固定の内容を表示します。 この処理の際に、react-router-domの``やreact-router-reduxの`push`、`replace`を使うとURLが書き換わってしまいます。これを元の`/user/:user_name`というURLのまま、Not foundのRouteの内容を表示させることは可能でしょうか。 ### 発生している問題・エラーメッセージ URLを書き換えずにNotFoundなRouteを表示したいが、URLが書き換わってしまう。 * `/user/:user_name`にアクセスする * Routeに定義されているので`UserDetail`のComponentが表示される * `UserDetail`内で動的にユーザ情報取得処理が実行される * 正常であればそのまま`UserDetail`のComponentが書き換わり、ユーザの詳細が表示される * 404が発生した際、`UserDetail`の代わりに`NotFoundPage`のComponentの内容が表示されて欲しい ようするに、URLを実際には書き換えずに、Switchの該当Routeが表示される方法がないかを知りたいです。 ### 該当のソースコード ``` ``` ### 試したこと react-router-domやreact-router-reduxのAPIをいろいろ調べてみた。 `Switch`内で一致したmatchを「やっぱうちは受け付けません!」と言える処理があればそのまま`NotFoundPage`に流れてくれそうですが... ### 補足情報(FW/ツールのバージョンなど) react@16.2.0 react-dom@16.2.0 react-router@3.2.1 react-router-dom@4.2.2 react-router-redux@5.0.0-alpha.9
回答: > > 404が発生した際、UserDetailの代わりにNotFoundPageのComponentの内容が表示されて欲しい > > & > > URLを実際には書き換えずに、 > > > ということであれば、404が発生した時に``に飛ばすということはせずに、単純に`UserDetail`コンポーネントの中で`NotFoundPage`を表示してあげれば良いだけではないでしょうか? もしくは、デコレーターのように`UserDetail`コンポーネントを別のコンポーネントでラップしてあげて、ラップする側のコンポーネントで`該当ユーザの情報の取得`を行い、取得できれば、`UserDetail`コンポーネントを返し、取得出来なれば`NotFoundPage`コンポーネントを返してあげるようにするとか。 ※ 後で時間があればコード書いて追記するかもしれません。