在我的React应用程序中,我有一些用户进入应用程序的参数,这些参数提供有关它们来自何处的一些信息。有没有一种方法可以使用react-
router在整个应用程序中保留这些查询参数。意思是每次更改路线时,Id都会像那些查询参数一样保留在url中。我看到的唯一示例是在路由之间传递查询参数,但没有为每个路由都保留它们。
React-Router v3的解决方案:
我在Typescript中编写了这个小的历史记录
v3(与react-router v3
兼容)增强器。它将保留给定的查询参数集。注意,传递给此函数的历史记录必须通过useQueries进行增强。
import {History, Location, LocationDescriptor} from 'history'
export default function preserveQueryHistory(history: History, queryParameters: string[]): History {
function preserveQueryParameters(path: LocationDescriptor): Location {
const location = history.createLocation(path)
const currentQuery = history.getCurrentLocation().query
for (let p of queryParameters) {
const v = (currentQuery as any)[p]
if (v) {
location.query[p] = v
}
}
return location
}
return {
...history,
push(path: LocationDescriptor) {
history.push(preserveQueryParameters(path))
},
replace(path: LocationDescriptor) {
history.replace(preserveQueryParameters(path))
}
}
}
现在使用它来创建历史记录:
import useQueries from 'history/lib/useQueries'
import createBrowserHistory from 'history/lib/createBrowserHistory'
import preserveQueryHistory from './preserveQueryHistory'
const history = preserveQueryHistory(useQueries(createBrowserHistory)(), ['language'])
在反应路由器中:
<Router history={history}>
...
</Router>
*具有CreateHistory
增强器功能的 *最终解决方案 ,该 解决方案
嵌入了应用useQueries
增强器并提供了注入自定义History
增强器的能力:
import {CreateHistory, History, HistoryOptions, HistoryQueries, Location, LocationDescriptor} from 'history'
import useQueries from 'history/lib/useQueries'
function preserveQueryParameters(history: History, queryParameters: string[], path: LocationDescriptor): Location {
const location = history.createLocation(path)
const currentQuery = history.getCurrentLocation().query
for (let p of queryParameters) {
const v = (currentQuery as any)[p]
if (v) {
location.query[p] = v
}
}
return location
}
function enhanceHistory<H>(history: History & H, queryParameters: string[]): History & H {
return Object.assign({}, history, {
push(path: LocationDescriptor) {
history.push(preserveQueryParameters(history, queryParameters, path))
},
replace(path: LocationDescriptor) {
history.replace(preserveQueryParameters(history, queryParameters, path))
}
})
}
export function createPreserveQueryHistoryWithEnhancer<O, H, H2>(createHistory: CreateHistory<O, H>,
queryParameters: string[], enhancer: (h: History) => History & H2): CreateHistory<O, H & H2 & HistoryQueries> {
return function (options?: HistoryOptions & O): History & H & H2 & HistoryQueries {
let h = enhancer(useQueries(createHistory)(options)) as History & H & H2 & HistoryQueries
return enhanceHistory<H & H2 & HistoryQueries>(h, queryParameters)
}
}
export function createPreserveQueryHistory<O, H>(createHistory: CreateHistory<O, H>,
queryParameters: string[]): CreateHistory<O, H & HistoryQueries> {
return createPreserveQueryHistoryWithEnhancer<O, H, {}>(createHistory, queryParameters, h => h)
}
export function preserveQueryHistoryWithEnhancer<H, H2>(history: History & H, queryParameters: string[],
enhancer: (h: History) => History & H2): History & HistoryQueries & H & H2 {
return createPreserveQueryHistoryWithEnhancer(
function () {
return history
},
queryParameters, enhancer)()
}
export function preserveQueryHistory<H>(history: History & H, queryParameters: string[]): History & HistoryQueries & H {
return preserveQueryHistoryWithEnhancer<H, {}>(history, queryParameters, h => h)
}
与syncHistoryWithStore react-router-redux v4
History
增强器配合使用:
import createBrowserHistory from 'history/lib/createBrowserHistory'
import {createPreserveQueryHistoryWithEnhancer} from './preserveQueryHistory'
import {syncHistoryWithStore} from 'react-router-redux'
const store = ...
const history = createPreserveQueryHistoryWithEnhancer(createBrowserHistory, ['language'], function (h: History) {
return syncHistoryWithStore(h, store)
})()
我在我的项目中使用react-router-dom 4.0.0-beta.6。我有一个代码如下: 我想在组件中获取查询参数。我找到了参数,如下所示:,因此未解析。 什么是正确的方法来获得查询参数与反应路由器v4?
问题内容: 我正在尝试使用with子句,并且希望能够以与清单中的元素相同的顺序返回结果。例如: 我希望他们以相同的顺序回来。理想的情况是,如果我能有一个这样的声明,那就太好了: 我已经看到了使用或关键字定义某种自定义排序的查询示例。但是,在所有这些示例中,它们的顺序都是针对一组预定的选项。鉴于我的订购完全取决于用户输入的搜索条件,因此可能有2个选项的列表或100个要订购的列表… 有任何想法吗?我不
问题内容: 我在客户端上为我的应用程序使用react和react-router。我似乎无法弄清楚如何从如下网址获取以下查询参数: 我的路线如下所示(我知道该路线完全错误): 我的路线工作正常,但我不确定如何格式化路径以获取所需的参数。感谢任何帮助! 问题答案: 注意:复制/粘贴评论。确保喜欢原始帖子! 编写es6并使用react 0.14.6 / react-router 2.0.0-rc5。我使
我试图通过访问 props.location.query 来获取带有 react-router 的 URL 查询参数,但查询未定义。如何获取它们? URL示例-http://localhost:3000/home?param1=tomato
问题内容: 我似乎找不到不使用来使用react- router更新查询参数的方法。似乎没有注册查询参数,而且似乎也不能将查询对象或任何内容作为第二个参数传递。 如何从更改URL ,以在反应路由器没有使用? 而且是一个真正的函数来监听查询变化的唯一途径?为什么没有自动检测到查询更改并对参数更改做出反应? 问题答案: 在中,您可以指定查询参数。例如, 要么 您可以查看此存储库以获取有关使用的其他示例