質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1203閲覧

【React】react-router-domrのprops.history.pushとurl直打ちのパスのマッチの仕方の違いについて

退会済みユーザー

退会済みユーザー

総合スコア0

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/04/20 17:43

前提

reactrouter-domを用いて以下の様にルーティングを定義?しています。

jsx

1<Switch> 2 <Route exact path='/articles/index' component={IndexArticlesComponent} /> 3 <Route exact path='/articles/:id' component={ShowArticleComponent} /> 4</Switch>

「/articles/index」ページは記事の検索結果であり、検索欄が付いています。
もしこのページに到達した際にクエリストリングが付いていれば、その内容を初期の検索条件とする様になっています。

問題

別のページから以下のコードを用いて「/articles/index」を表示させようとした時に、「/articles/:id」の方にマッチ(=ShowArticleComponentを表示)してしまいます。

JavaScript

1props.history.push({ 2 pathname: '/articles/index?articleTitle=HowToReact' 3});

問題補足

'/articles/index?articleTitle=HowToReact'というパスを指定して以下の3パターンによって遷移を行う場合はちゃんと(というか意図した通り)「/articles/index」ページにいってくれます。

  • URL直打ち
  • react-router-domのLinkコンポーネントを使う
  • aタグを使う

質問

なぜこの様な違いが出るのでしょうか?
pushの場合とurl指定のリンクの場合でマッチの仕様が異なるのでしょうか?

また、解決の方法についても妙案があれば賜りたく存じます、、、、

質問補足

  • articles/indexには各所からリンクが貼られており、クエリストリングから条件を取得する仕様は変えたくありません。

つまり、props.history.push時にパラメータをjsonのまま渡して、articles/indexで受け取るのはやりたくないです、、、

大変お手数ですがどなたかお力添え頂けたら幸いです!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

push の引数に URL 文字列をそのまま渡すか、

js

1props.history.push('/articles/index?articleTitle=HowToReact');

location オブジェクト を渡せば良いようです。

js

1props.history.push({ 2 pathname: '/articles/index', 3 search: '?articleTitle=HowToReact' 4});

投稿2021/04/21 02:47

hoshi-takanori

総合スコア7895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/04/22 05:33

わああああ!ありがとうございます! 言われてみれば確かに、、、という感じです。 申し訳ありません、、、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問