编辑:发布了关于我是如何解决这个问题的答案,而不是使用react路由器可选参数。
出于某种原因,当我使用附加到url的可选参数转到可选react router route/url时,我遇到了一个GET错误。我试图通过在url中包含可选参数SRC来跟踪用户的来源。我已经尝试了从/ref=testing、/src=testing、/testing到:referer?它们可能会保存在本地存储中,但仍然会引发控制台GET请求。
下面是my App.js的外观:
<Route exact path="/profile/user/:user/:referrer?" component={ ProfileById } />
:user是mongoose结构中的用户ID:推荐人?是src=(无论它是什么)
这是我对路由的axios请求:
export const getProfileByUserId = (user) => dispatch => {
dispatch(setProfileLoading());
axios.get(`/profile/user/${user}`)
.then(res =>
dispatch({
type: GET_PROFILE,
payload: res.data
})
)
.catch(err =>
dispatch({
type: GET_PROFILE,
payload: null
})
);
}
下面是我的componentDidMount()中的内容,在这里我运行axios GET请求,然后检查可选参数并将其存储在localStorage中。
componentDidMount() {
if (this.props.match.params.user) {
this.props.getProfileByUserId(this.props.match.params.user);
}
if (this.props.match.params.referrer) {
let referrerString = this.props.match.params.referrer.split('=');
localStorage.setItem('referrer', referrerString[1])
}
}
当我加载路由时,假设它是: /profile/user/20385h1058h385/ref=测试GET错误出现为:404未找到,然后说错误是 /ref=测试如果它是一个可选参数,并且我实际上没有在这个可选参数上请求GET,它怎么上来了?
感谢您的帮助,谢谢!
我无法让它使用react可选参数路由,因此我只做了一个新的URLSearchParams(),将其生成一个字符串,然后拆分该字符串以标识实际的搜索查询。在斜杠路径上工作,如:/?src=测试,以及将其附加到现有路径时。
这是我想出来的:
if (this.props.location.search) {
// Check to see if the search address has a location and search query param, if so save in localStorage for referrer source
//console.log(this.props.location.search);
let srcParams = new URLSearchParams(this.props.location.search);
let srcString = srcParams.toString();
let referrerString = srcString.split('=');
localStorage.setItem('referrer', referrerString[1]);
}
请仅在URL中添加testing
,而不是ref=testing
。在这种情况下,您的URL将是/profile/user/20385h1058h385/testing
我们把:
为所需的参数和:parameter_name?
为可选参数。
例如:
<Route path="/login/:p1/:p2?" component={Login} />
这里p1是必需参数,p2是可选参数。
我们在componentDidMount方法中得到了这些。
this.props.match.params.p1
我试图创建一个符合以下所有URL的路由: 这是我目前的路线: 根据关于https://github.com/rackt/react-router/blob/master/docs/guides/basics/RouteMatching.md 此路由应该完全匹配,但与上面的URL都不匹配。 我需要做什么来支持这个可选参数? 我在React路由器版本0.13.3,如果我删除,那么我可以匹配第一个URL
所以我有一些路线,比如<code>/category/tech</code>和<code</categority/tech/new<code>和<code>/category/tech/old</code>等等 他们都使用 或者我必须分别定义它们,就像
问题内容: 我想用可选的path参数声明一个路径,因此当我添加它时,页面会做一些额外的事情(例如,填充一些数据): http:// localhost / app / path / to / page <=渲染页面 http:// localhost / app / path / to / page / pathParam <=根据pathParam使用某些数据渲染页面 在我的React Rout
我需要以两种方式路由到某个组件——一种是带参数的,另一种是不带参数的。我已经搜索了可选参数,但不知何故找不到太多信息。 所以我的路线: 当我以编程方式调用参数时,一切都很好 但是我也需要通过导航这样称呼它 组件接受道具 以及用作此类的组件 现在,我设法让它工作的丑陋方式是复制路线,让其中一个不带道具: 它实际上是有效的,但我对它不满意-也在开发模式下vuejs警告我 当然有一种方法可以在组件调用中
根据这个问题的公认答案,React路由器4不再匹配查询参数。如果我从一个与我的<code>匹配的URL 例如,许多搜索引擎和其他使用搜索栏的网站,包括我正在工作的网站,都使用一个查询参数,通常是< code>q或< code>query。用户可以搜索一个东西,然后决定这不是他/她想要的,并搜索另一个东西。用户可以键入第二个URL或者再次使用搜索栏进行搜索。URL路径中实际上没有放置搜索词的位置,所
例如,在具有分页列表的路由上,网址可能如下所示,表示我们已加载第二个网页: 使用指令和来传递查询参数。例如: 或者,我们可以使用服务通过JS跳转: 读取查询参数 See Official Documentation on Query Parameters