には反応し、ルータ4.0.0.alpha6を、私はこれを達成したい:部分リダイレクト4.0.0.alpha6
site.com/en -> site.com
site.com/en/hi -> site.com/hi
site.com/en/hi/there -> site.com/hi/there
は、どのように私はそれに行きますか? 私はドキュメントから多くを試しましたが、悲しいことにそれを得るように見えることはできません...
ありがとう読んで!
には反応し、ルータ4.0.0.alpha6を、私はこれを達成したい:部分リダイレクト4.0.0.alpha6
site.com/en -> site.com
site.com/en/hi -> site.com/hi
site.com/en/hi/there -> site.com/hi/there
は、どのように私はそれに行きますか? 私はドキュメントから多くを試しましたが、悲しいことにそれを得るように見えることはできません...
ありがとう読んで!
注:v4アルファについて言及していますが、私はベータ版(未リリースですが、レポのv4ブランチから利用可能です)を使用します。
実質的には、en
セグメントで始まり、残りのURLセグメントから分割してpathname
の残りの部分にリダイレクトするpathname
を特定することです。
正規表現では、これを/^\/en(\/.*)?$/
と一致させることができます。 React Routerはpath-to-regexp
を使ってパス名にマッチさせますが、これは正規表現をサポートしますが、React Routerは(少なくとも直接ではありません)。それでも、名前の付いていないパラメータを使用して、これと一致するパスを設定できます。
/en
、
/en
、および
/en/hi
ではなく
/english
と一致している必要があり
<Route path='/en(/*)' component={EnRedirect} />
。次に、コンポーネントで一致したurl
をセグメントに分割し、en
を削除し、セグメントに再結合してリダイレクトする必要があります。
const EnRedirect = ({ match }) => {
const parts = match.url.split('/')
parts.splice(1,1)
const to = parts.join('/')
return <Redirect to={to} />
}
あなたの答えをありがとう!あなたが使用する#v4ブランチのバージョンのコミット番号を教えてください。インストールするコミットが見つからないようです。 –
NPMを使用してインストールしようとしている場合、まだ動作しません。あなたは 'git clone'のReact Routerを必要とし、' v4'ブランチをチェックし、 'packages/react-router'ディレクトリに移動します(React Routerは複数のパッケージに変換されています:' react-router'、 'react-router -dom'、 'react-router-native')、パッケージに' npm link 'して、あなたのプロジェクトと 'npm link react-router'に行きます。これは、 'npm install react-router @ next'よりはるかに多くのステップですが、ベータがリリースされるまでは、あなたのプロジェクトでベータコードを使用するために必要な作業です。 –
これはアルファ版では 'Route'を' Match'に、 'path'を' pattern'に、 'match.url'を' match.pathname'に変更することで可能になると思います。 –
URLをリダイレクトしますか?または異なるコンポーネントをレンダリングしますか?あなたは試したものを投稿できますか?たぶんそれはあなたがもう少ししたいことを説明します – azium