次のようなルートがある場合:
<Route path="/users/:userId" />
次に、そのルートをエクスポートして、次のようにアプリ全体で使用できるようにします。
export const MY_ROUTE = '/users/:userId/';
<Route path={MY_ROUTE} />
リンクのパラメーターを動的にどのように設定しますか?つまり、私はこれをしたいと思います:
<Link to={MY_ROUTE} params={{userId: 1}} />
しかし、paramsは完全に無視されます...そして、クエリはクエリ(?userId =)をパラメータではなく単に作成します...任意のアイデア?
1.xから2.xへのアップグレードガイドから:
<Link to>
、onEnter、isActiveはロケーション記述子を使用します
<Link to>
は、文字列に加えて位置記述子を使用できるようになりました。クエリと状態のプロパティは廃止されました。// v1.0.x
<Link to="/foo" query={{ the: 'query' }}/>
// v2.0.0
<Link to={{ pathname: '/foo', query: { the: 'query' } }}/>
残念ながら、param
オブジェクトを渡すことはサポートされていません。
提案したルートを動的に使用するには、次のように何かを行う必要があります。
<Link to={ MY_ROUTE.replace(':userId', '<someUserIdFromSomewhere>') }/>
または、MY_ROUTE
の文字列をエクスポートする代わりに、userLink
関数を次のようにエクスポートして、さらに最適化することもできます。
function userLink(userId) {
return `/users/${userId}/`;
}
ルートにLink
を使用する場所ならどこでもそれを使用します。
以下は、Link
コンポーネントで公開されているサポートされているパラメーターとAPIです。
私はこれが古い質問であることを知っていますが、React Router V4では path-to-regexp
パッケージ。これはReact Router V4でも使用されています。
例:
import {Link} from 'react-router-dom';
import {compile} from 'path-to-regexp';
const MY_ROUTE = '/users/:userId/';
const toPath = compile(MY_ROUTE);
// Now you can use toPath to generate Links dynamically
// The following will log '/users/42' to the console
console.log( toPath({ userId: 42 }) );
もちろん、toPath
メソッドを使用して適切なリンクを作成することもできます。例:
<Link to={toPath({ userId: 42 })}>My Link</Link>
次のように、userId
パラメータを補間してルートを作成する関数を作成できます。
export const MY_ROUTE = (userId) => `/users/${userId}/`;
<Route path={MY_ROUTE(':userId')} />
そしてあなたのコンポーネントで
<Link to={MY_ROUTE(1)} params={{userId: 1}} />
ここでこの解決策を試してください: https://jsbin.com/pexikoyiwa/edit?js,console