[解決済み] クエリ文字列からパラメータ値を取得する方法は?
質問
routes.jsxファイルにルートを定義して
__firebase_request_key
Twitterのシングルサインオン処理で、サーバーからリダイレクトされた後に生成されたURLから、パラメータ値を取得することはできますか?
http://localhost:8000/#/signin?_k=v9ifuf&__firebase_request_key=blablabla
以下のようなルート構成で試しましたが
:redirectParam
は、指定されたパラメータをキャッチしません。
<Router>
<Route path="/" component={Main}>
<Route path="signin" component={SignIn}>
<Route path=":redirectParam" component={TwitterSsoButton} />
</Route>
</Route>
</Router>
解決方法は?
React Router v6、フックを使用する。
react-router-dom v6では、新しいフックである useSearchParams . そのため
const [searchParams, setSearchParams] = useSearchParams();
searchParams.get("__firebase_request_key")
を取得します。
"blablabla"
. searchParamsはURLSearchParamsのインスタンスで、Object.fromEntriesなどのイテレータも実装していることに注意しましょう。
React Router v4/v5、フックなし、汎用品
React Router v4 はもうクエリをパースしませんが、クエリにアクセスするには
this.props.location.search
(または useLocation, 下記参照)。理由としては
nbeuchatさんの回答
.
例
qs
としてインポートされたライブラリは
qs
を実行することができます。
qs.parse(this.props.location.search, { ignoreQueryPrefix: true }).__firebase_request_key
別のライブラリは クエリ文字列 . 参照 この回答 には、検索文字列のパースに関するいくつかのアイデアがあります。もし IE対応 を使用することもできます。
new URLSearchParams(this.props.location.search).get("__firebase_request_key")
機能コンポーネントの場合、次のように置き換えます。
this.props.location
をフックとする
使用場所
. 注:この場合
window.location.search
しかし、これでは変更時にReactのレンダリングをトリガーすることができません。
もし、あなたの(非機能的な)コンポーネントが、直接の子として
Switch
を使用する必要があります。
withRouter
を使用して、ルータが提供する任意のプロップにアクセスできます。
React Router v3
React Routerはすでにあなたのために場所を解析し、それをあなたの RouteComponent をプロップスとして使用します。クエリ部分(URLの ? の後ろ)には、以下の方法でアクセスできます。
this.props.location.query.__firebase_request_key
ルーター内のコロン(:)で区切られたパスパラメーター値を探している場合、これらは
this.props.match.params.redirectParam
React Router v3 の後期バージョン(どれかは不明)に適用されます。古いバージョンのルーターでは
this.props.params.redirectParam
.
一般
nizam.spさんからのご提案
console.log(this.props)
は、どんな場合でも役に立ちます。
関連
-
[解決済み】<Router>の外側で<Link>を使用してはならない
-
[解決済み] reactでonloadを使うには?
-
[解決済み] useStateプロパティのフックにmap関数を使用する方法
-
[解決済み] Webpack + Babelです。プリセット "es2015 "がディレクトリに相対して見つからなかった
-
[解決済み] react nativeで関数だらけのヘルパーファイルを作成する方法は?
-
[解決済み] Webpack のコンパイルに失敗した
-
[解決済み] React TypeScriptで作業しているときに、Jestが予期しないトークンに遭遇した
-
[解決済み] ReactJS - SCRIPT1010: 期待される識別子 - IE11 で本番ビルドが実行されない
-
[解決済み] アクシオスは定義されていません
-
[解決済み】オプションのパスパラメータを持つReact Router
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React Propsが定義されていません。
-
[解決済み] FontAwesomeの無料パッケージに含まれているアイコンのオブジェクト名はどこにあるのですか?
-
[解決済み] reactでonloadを使うには?
-
[解決済み] React の open mailto E-Mail クライアントの onClick で textarea から本文を取得する。
-
[解決済み] React - _this2.SetStateは関数ではありません。
-
[解決済み] react.jsでng-ifに相当するものは何ですか?
-
[解決済み] Reactプロジェクトに.envファイルを追加する
-
[解決済み] ESLintとTSLintの違い【クローズド】について
-
[解決済み] Reactのrender()にFont Awesomeのアイコンを入れる方法
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?