反応ルーターv3では、props.location.query.foo
でアクセスできました(現在の場所が?foo=bar
の場合)
[email protected]
props.location
にはprops.location.search
のみがあり、withは?foo=bar&other=thing
のような文字列です。
おそらく、その文字列を手動で解析および分解して、foo
またはother
の値を見つける必要があります。
console.log(this.props)
のスクリーンショット: (?artist=band
からどのようにartist
から値を取得したいかに注意してください。これはband
の値です)
すでに正しいと思っているようです。クエリ文字列を解析する機能はV4から削除されました。これは、長年にわたってさまざまな実装をサポートする要求があったためです。それにより、チームは、その実装がどのように見えるかをユーザーが決定することが最善であると判断しました。クエリ文字列libをインポートすることをお勧めします。 あなたが言及したもの はこれまでのところ私にとってはうまく機能しました。
const queryString = require('query-string');
const parsed = queryString.parse(props.location.search);
ネイティブのものが必要で、ニーズに合っている場合は、new URLSearchParams
を使用することもできます
const search = props.location.search; // could be '?foo=bar'
const params = new URLSearchParams(search);
const foo = params.get('foo'); // bar
決定の詳細についてはこちらをご覧ください こちら
query-string モジュールを使用すると、最適化された実動ビルドの作成中に次のエラーが発生する場合があります。
このファイルからコードを縮小できませんでした:./node_modules/query-string/index.js:8
これを克服するには、ビルドの実行中に問題なく同じプロセスを問題なく実行する stringquery という代替モジュールを使用してください。
import querySearch from "stringquery";
var query = querySearch(this.props.location.search);
ありがとうございました。
私は自分の小さなES6
形状関数、素晴らしい、軽量で便利なものを提供します:
getQueryStringParams = query => {
return query
? (/^[?#]/.test(query) ? query.slice(1) : query)
.split('&')
.reduce((params, param) => {
let [key, value] = param.split('=');
params[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : '';
return params;
}, {}
)
: {}
};
すべてがここにあります、あなたを助けることを願っています。
この投稿を見つけてよかったです。リンクをありがとう、数時間後、ついにコードがアップグレードされました。
クエリ文字列を使用している人は、次のようなことをする必要があるかもしれません
var nameYouWant = queryString.parse(this.props.location.search).nameYouWant;
私の場合、これは起こり、this.props.location.search.theUrlYouWant
は動作を拒否しました。 Tylerが言及した2番目のオプションも、同様の調整で機能しました。