[英]React Router and Arbitrary Query Params: Page Refreshes Unintentionally on Load?
在過去的幾周中,我一直在使用React Router取得巨大的成功,但是我遇到了一個似乎無法解決的問題。 每當將任意查詢參數附加到url(在我們的示例中,出於電子郵件中的URL跟蹤目的)時,您加載的頁面都會加載,然后自動刷新而不會發出警告。
給出最基本的路由設置:
var routes = (
<Route handler={ResultsController}>
<DefaultRoute handler={Results} />
</Route>
);
和默認處理程序:
Router.run(routes, function (Handler, state) {
React.render(<Handler params={state.params} />, domElement);
});
如果我導航到http://whatever.com/results
一切正常,但是如果我導航到http://whatever.com/results?ref=track
則頁面將刷新並重定向回http://whatever.com/results#/
。 請注意,在哈希和斜杠后附加queryParams會導致正確的行為; 問題是,其中許多鏈接都是在服務器端生成的,因此不希望以這種方式強制使用哈希。
我是否需要為queryParams設置通配符處理程序? 任何指向文檔的指針也將有所幫助。
編輯:
雖然這不能解決導致無意刷新的總體問題/錯誤,但我發現使用Router.HistoryLocation PushState選項加載路由可以允許queryParams預渲染:
Router.run(routes, Router.HistoryLocation, function (Handler, state) {
React.render(<Handler params={state.params} query={state.query} />, domElement);
});
謝謝!
這里的問題是您使用的是Router.HashLocation
,如果您未指定默認位置,則為默認位置。
Router.run(routes, Router.HistoryLocation, function(...
將解決此問題,但您需要一個可以處理它的服務器。
如果仍然需要哈希位置,請將查詢放在#
后面 。 就HashLocation
而言, #
之前的查詢不是它理解的位置的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.