当前位置: 首页 > 知识库问答 >
问题:

如何在 react 中的每个路由路径中传递查询参数?

卓云
2023-03-14

我正在尝试使用http://localhost:3000/login?Id=1这样的查询参数来实现React路由器,我只能在我的登录路由中实现它,如果我将路径作为http://localhost:3000/然后重定向,但是,我想在整个应用程序中实现。如果我在其他路由上实现,它会匹配namatch路由。这就是我的index.js的样子,有人能指导我如何实现包括查询参数在内的所有路由路径吗?

ReactDOM.render(
      <BrowserRouter>
        <Switch>
          <Route
            exact
            path={`/`}
            render={() => {
              if (!store.getState().login.isAvailable) {
                return <Redirect to={`/login?Id=${Id}`} />
              } else {
                return <Dashboard />
              }
            }}
          />
          <Route exact path={`/login`} component={Login} />
          <Route exact path={`/signup`} component={SignUp} />
          {Routes.map((prop, key) => (
            <Route path={prop.path} key={key} component={prop.component} />
          ))}
          <Route component={NoMatch} />
        </Switch>
      </BrowserRouter>,
  document.getElementById('root')
)

共有1个答案

晏华奥
2023-03-14

有两种方法可以完成你想要的。最基本的方法是在每个“页面”或每个路由的根组件上,处理查询参数的解析。

作为< code>Route组件的< code>component的任何组件都将被传递适当的< code >位置。查询参数位于< code>location.search中,需要对其进行解析。如果你只是担心现代的浏览器,你可以使用URLSearchParams,或者你可以使用像query-string这样的库,当然,你也可以自己解析它们。

您可以在react router文档中阅读更多信息。

第二种方法其实并没有什么不同,但你可以使用一个HOC来包装你的每个“页面”,处理查询参数的解析,并将它们作为列表或其他东西传递给有问题的“页面”组件。

以下是使用URLSearchParams的基本方法的示例:

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

// this is your "page" component, we are using the location prop
function ParamsPage({ location }) {
  // you can use whatever you want to parse the params
  let params = new URLSearchParams(location.search);

  return (
    <div>
      <div>{params.get("name")}</div>
      // this link goes to this same page, but passes a query param
      <a href="/?name=MyName">Link that has params</a>
    </div>
  );
}

// this would be equivalent to your index.js page
function ParamsExample() {
  return (
    <Router>
      <Route component={ParamsPage} />
    </Router>
  );
}

export default ParamsExample;

编辑:为了澄清,你不需要在你的index.js页面上做任何事情来完成这项工作,你拥有的简单的Route应该可以正常工作。

 类似资料:
  • 对于下面的代码: 我有一个路由器路由到另一个路由器,看起来像这样: 处理程序如下所示: 我的问题是处理程序无权访问请求.params 中的campaign_uid。如何访问campaign_uid/传递给处理程序?

  • 问题内容: 我正在使用AngularJS路由,并试图查看如何使用查询字符串(例如 )。Angular无法理解包含相同名称的键值对的路由: 问题答案: 我认为路由不适用于查询字符串。可以使用 如下方式而不是使用更RESTful的URL,然后按以下方式定义路由: 或许

  • 我已经使用FastAPI创建了一个简单的API,我正在尝试将URL作为任意的<code>路径</code>参数传递给FastAPI路由。 当我测试它时,它不起作用并抛出错误。我以这种方式测试它:

  • 使用redux和反应路由器,我想访问路由指定的组件以外的组件上的路由参数。 我已经对react-router、redux和react-router-redux进行了如下设置,我想从我的redux存储访问reportId参数。 我已经尝试连接react-redux路由器来存储路由状态,但是我发现除了活动路由的完整路径之外,redux内部没有任何有用的存储。这让我可以选择从redux中的路径解析出re

  • 所以我面临的问题是,当我点击Hover Books组件中的链接进入一个新页面时,我可以在其中呈现图书状态,但当我按下它时,什么也没有发生。我知道错误可能在哪里(路由)。如果你能帮我修好它,我将不胜感激。谢谢

  • 我对反应和试图理解如何传递道具很陌生。 首先,我设置了一个Navlink组件,该组件包含子类别属性: ,,都是从json文件中获取的,所以这部分是可以的。 每条路线的定义如下: 所以它呈现一个名为