Saya menggunakan react dan react-router untuk aplikasi saya di sisi klien. Sepertinya saya tidak tahu cara mendapatkan parameter kueri berikut dari url seperti:
http://xmen.database/search#/?status=APPROVED&page=1&limit=20
Rute saya terlihat seperti ini (jalurnya benar-benar salah, saya tahu):
var routes = (
<Route>
<DefaultRoute handler={SearchDisplay}/>
<Route name="search" path="?status=:status&page=:page&limit=:limit" handler={SearchDisplay}/>
<Route name="xmen" path="candidate/:accountId" handler={XmenDisplay}/>
</Route>
);
Rute saya berfungsi dengan baik tetapi saya tidak yakin bagaimana memformat jalur untuk mendapatkan parameter yang saya inginkan. Hargai bantuan apa pun dalam hal ini!
javascript
reactjs
client-side
react-router
client-side-scripting
Christopher Robin
sumber
sumber
getCurrentQuery
willTransitionTo
pengait pada pawang Anda. Ini menerima parameter string kueri. github.com/rackt/react-router/commit/…Jawaban:
Catatan: Salin / Tempel dari komentar. Pastikan untuk menyukai postingan aslinya!
Menulis di es6 dan menggunakan react 0.14.6 / react-router 2.0.0-rc5. Saya menggunakan perintah ini untuk mencari parameter kueri di komponen saya:
Ini membuat hash dari semua parameter kueri yang tersedia di url.
Memperbarui:
Untuk React-Router v4, lihat jawaban ini . Pada dasarnya, gunakan
this.props.location.search
untuk mendapatkan string kueri dan parse denganquery-string
paket atau URLSearchParams :sumber
query
tampaknya hilang di React Router 4. github.com/ReactTraining/react-router/issues/…LAMA (sebelum v4):
Menulis di es6 dan menggunakan react 0.14.6 / react-router 2.0.0-rc5. Saya menggunakan perintah ini untuk mencari parameter kueri di komponen saya:
Ini membuat hash dari semua parameter kueri yang tersedia di url.
UPDATE (React Router v4 +):
this.props.location.query di React Router 4 telah dihapus (saat ini menggunakan v4.1.1) lebih lanjut tentang masalahnya di sini: https://github.com/ReactTraining/react-router/issues/4410
Sepertinya mereka ingin Anda menggunakan metode Anda sendiri untuk mengurai parameter kueri, saat ini menggunakan pustaka ini untuk mengisi celah: https://github.com/sindresorhus/query-string
sumber
TypeError: Cannot read property 'location' of undefined
:: |Jawaban di atas tidak akan berhasil
react-router v4
. Inilah yang saya lakukan untuk memecahkan masalah -Pertama Instal query-string yang akan diperlukan untuk parsing.
npm install -save query-string
Sekarang di komponen yang dirutekan Anda dapat mengakses string kueri yang tidak diurai seperti ini
this.props.location.search
Anda dapat memeriksa silang dengan masuk ke konsol.
Terakhir, parsing untuk mengakses parameter kueri
Jadi jika query seperti itu
?hello=world
console.log(parsed.hello)
akan masukworld
sumber
const query = new URLSearchParams(props.location.search); console.log(query.get('hello'));
(perlu polyfill untuk browser lama).perbarui 2017.12.25
"react-router-dom": "^4.2.2"
url seperti
BrowserHistory
:http://localhost:3000/demo-7/detail/2?sort=name
HashHistory
:http://localhost:3000/demo-7/#/detail/2?sort=name
dengan ketergantungan query-string :
hasil:
2 {sort: "name"} home
"react-router": "^2.4.1"
Url suka
http://localhost:8080/react-router01/1?name=novaline&age=26
const queryParams = this.props.location.query;
queryParams adalah objek yang berisi parameter kueri:
{name: novaline, age: 26}
sumber
http://localhost:8090/#access_token=PGqsashgJdrZoU6hV8mWAzwlXkJZO8ImDcn&expires_in=7200&token_type=bearer
(yaitu tidak ada/
setelah#
) Lalu untuk bereaksi v4 router Anda harus menggunakanlocation.hash
bukannyalocation.search
Semoga membantu :)
Selamat membuat kode!
sumber
Anda tidak perlu menambahkan modul tambahan apa pun hanya di komponen Anda yang memiliki alamat url seperti ini:
http: // localhost: 3000 / # /? otoritas '
Anda dapat mencoba kode sederhana berikut:
sumber
Setelah membaca jawaban lain (Pertama oleh @ duncan-finney dan kemudian oleh @Marrs) saya berangkat untuk menemukan log perubahan yang menjelaskan cara react-router 2.x idiomatik untuk menyelesaikan ini. The dokumentasi menggunakan lokasi (yang Anda butuhkan untuk query) dalam komponen sebenarnya bertentangan dengan kode aktual. Jadi jika Anda mengikuti nasihat mereka, Anda akan mendapatkan peringatan marah besar seperti ini:
Ternyata Anda tidak bisa memiliki properti konteks yang disebut lokasi yang menggunakan tipe lokasi. Tapi Anda bisa menggunakan properti konteks yang disebut loc yang menggunakan tipe lokasi. Jadi solusinya adalah modifikasi kecil pada sumbernya sebagai berikut:
Anda juga bisa mewariskan hanya bagian-bagian dari objek lokasi yang Anda inginkan agar anak Anda mendapatkan manfaat yang sama. Itu tidak mengubah peringatan untuk mengubah tipe objek. Semoga membantu.
sumber
Solusi js sederhana:
Dan Anda dapat memanggilnya dari mana saja menggunakan:
Semoga ini membantu.
sumber
Anda mungkin mendapatkan error berikut saat membuat build produksi yang dioptimalkan saat menggunakan modul query-string .
Untuk mengatasinya, gunakan modul alternatif bernama stringquery yang melakukan proses yang sama dengan baik tanpa masalah saat menjalankan build.
sumber