私は次のような道を持っています
<Route path="/account/:accountid/LoginPage"
component={LoginPage}/>
URLが-> /account/12332/LoginPage
の場合、これは正常に機能します。オプションのクエリパラメータが必要です。 URL構造は次のようになります
/account/12322/LoginPage?User=A&User=B
パスを次のように変更しました
<Route path="/account/:accountid/LoginPage(/:User)"
component={LoginPage}/>
この後、URLにアクセスしようとすると、適切なページにリダイレクトされず、代わりに次のようなエラーがスローされます。
useBasename.js:56 Uncaught TypeError: history.getCurrentLocation is not a function
at Object.getCurrentLocation (useBasename.js:56)
at Object.getCurrentLocation (useQueries.js:64)
at Object.listen (createTransitionManager.js:246)
at Object.componentWillMount (Router.js:97)
at ReactCompositeComponent.js:347
at measureLifeCyclePerf (ReactCompositeComponent.js:75)
at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:346)
at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257)
at Object.mountComponent (ReactReconciler.js:45)
at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370)
React-router v4(最新バージョン)の時点では、クエリパラメーター(?user = nerve&name = no-one)をサポートしていません。ただし、URLパラメータはサポートしています。 GitHubの問題 同じ点について議論しています。先に進んでそれを読んでください。いくつかの良い解決策がありますが、コアライブラリに直接組み込まれているものはありません。
私が通常実装する回避策は、同じコンポーネントをレンダリングする複数のルートを追加することです。
<Route exact path='/' component={ HomePageConnector } />
<Route exact path='/search/:searchTerm' component={ HomePageConnector } />
私が理解しているように、v4の唯一の問題は、location.query
オブジェクトが公開されなくなったことです。ただし、location.search
(これはSTRINGであり、オブジェクトではありません)には引き続きアクセスできます。この文字列を読み取り、 query-string のようなライブラリに渡して、より意味のあるオブジェクトを取得できます。このようにして、URLパラメータではなくクエリパラメータを引き続き使用できます。この情報はすでにGitHubの問題に書かれていますが、コメント全体に少し散らばっています。次のようなもの(テストされていませんが):
ルート:
<Route exact path='/test' component={HomePageConnector} />
コンポーネント内のパラメータの取得:
const parseQueryString = require('query-string');
let queryString = this.props.location.search;
let queryParams = parseQueryString.parse(queryString);