如何在routes.jsx文件中定义路由,以便从服务器重定向后从Twitter的单点登录进程生成的URL中捕获 __firebase_request_key
参数值?
http://localhost:8000/#/signin?_k=v9ifuf&__firebase_request_key=blablabla
我尝试使用以下路由配置,但 :redirectParam
没有捕获提到的参数:
<Router>
<Route path="/" component={Main}>
<Route path="signin" component={SignIn}>
<Route path=":redirectParam" component={TwitterSsoButton} />
</Route>
</Route>
</Router>
18 回答
React Router v3
React Router已经为您解析了该位置,并将其作为道具传递给您的RouteComponent . 您可以访问查询(在网址中的?之后)部分
如果您正在寻找路径参数值,在路由器内部用冒号(:)分隔,可以通过它们访问
这适用于后期React Router v3版本(不确定哪个版本) . 据报道较旧的路由器版本使用
this.props.params.redirectParam
.React Router v4
React Router v4不再为您解析查询,但您只能通过
this.props.location.search
访问它 . 原因见nbeuchat's answer .例如 . 将query-string库作为
qs
导入,你可以做到此外,如果您的组件不是
Switch
的直接子项,则需要使用withRouter来访问任何路由器提供的道具 .General
nizam.sp的建议
无论如何都会有所帮助 .
React Router v4
Using component
使用路径道具自动渲染组件 .
Using render
路径道具传递给渲染功能 .
React Router v4 no longer has the
props.location.query
object (见github讨论) . 因此,接受的答案不适用于较新的项目 .v4的解决方案是使用外部库query-string来解析
props.location.search
React Router v4
使用React Router v4,
this.props.location.query
不再存在 . 您需要使用 this.props.location.search 来自行解析查询参数或使用现有的包(如query-string)来解析查询参数 .Example
这是使用React Router v4和
query-string
库的最小示例 .Rational
React Router的团队合理删除
query
属性是:您可以在GitHub找到完整的讨论 .
您可以检查react-router,简单来说,只要您在路由器中定义,就可以使用代码获取查询参数:
React Router v4
请注意,它目前是实验性的 .
在此处检查浏览器兼容性:https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/URLSearchParams#Browser_compatibility
如果您的路由器是这样的
你会得到这样的id
this.props.params.your_param_name
会奏效 .这是从查询字符串中获取参数的方法 .
请
console.log(this.props);
探索所有可能性 .如果你没有得到
this.props
...你期望基于其他答案,你可能需要使用withRouter
(docs v4):从v4开始
React router
不再直接在其location
对象中提供query params
. 原因是包含它之后,只需在您的视图组件中解析期望查询对象的location.search就更有意义了 .
您可以通过从
react-router
覆盖withRouter
来一般地执行此操作customWithRouter.js
据我所知,有三种方法可以做到 .
1.使用正则表达式获取查询字符串 .
2.你可以使用浏览器api . image当前网址是这样的:
我们只想得到123;
第一
然后
用一个第三个库叫做'query-string' . 首先安装它
然后将其导入当前的javascript文件:
下一步是在当前网址中获取“令牌”,请执行以下操作:
希望能帮助到你 .
我很难解决这个问题 . 如果没有上述工作,您可以尝试这样做 . 我正在使用create-react-app
Requirements
react-router-dom“:”^ 4.3.1“
Solution
在指定路由器的位置
添加您想要传递的参数名称,如下所示
在您渲染某些/ path的页面上,您可以指定此参数来查看参数名称调用ID,如下所示
在您导出默认值的末尾
请记住包含导入
当console.log(this.props)你将能够传递下来的东西 . 玩得开心!
在您需要访问可以使用的参数的组件中
this.props.location.state.from.search
这将显示整个查询字符串(
?
符号后的所有内容)In React Router v4 only withRoute is correct way
您可以通过withRouter高阶组件访问历史对象的属性和最接近的匹配 . withRouter会在呈现时将更新的匹配,位置和历史道具传递给包装组件 .
https://reacttraining.com/react-router/web/api/withRouter
我使用一个名为query-string的外部包来解析url参数,就像这样 .
您可以使用以下命令查看查询:
}
最简单的解决方案
在路由:
反应代码: