【问题标题】:Querystring in react-router反应路由器中的查询字符串
【发布时间】:2016-07-06 16:41:57
【问题描述】:

我正在尝试使用查询字符串设置路由路径。类似于:

www.mywebsite.com/results?query1=:query1&query2=:query2&query3=:query3

我宁愿像这样过渡到“结果”组件:

<Route path="/" component={Main}>
  <IndexRoute component={Home} />
  <Route path="results?query1=:query1&query2=:query2&query3=:query3"
    component={SearchResults} />
</Route>

在 SearchResults 容器中,我希望能够访问 query1、query2 和 query3 参数。

我无法让它工作。我收到以下错误:

bundle.js:22627 警告:[react-router] 位置 “/results?query1=1&query2=2&query3=3”没有匹配任何路由

我尝试按照以下指南中的步骤操作:(部分:查询字符串参数呢?) https://www.themarketingtechnologist.co/react-router-an-introduction/

我可以在这里寻求帮助吗?

【问题讨论】:

    标签: reactjs query-string react-router


    【解决方案1】:

    如果您使用的是 React Router v2.xx,您可以通过传入 Route 组件的 location.query 对象访问查询参数。

    换句话说,您可以修改您的路线,使其如下所示:

    <Route path="results" component={SearchResults} />
    

    然后在您的SearchResults 组件中,使用this.props.location.query.query1query2query3 类似)来访问查询参数值。

    编辑: React Router v3.xx 仍然是这种情况。

    【讨论】:

      【解决方案2】:

      如果你使用 React Router >= v4 location.query 不再可用。你可以插入一个外部库(比如https://www.npmjs.com/package/query-string),或者使用这样的东西:

      const search = props.location.search; // could be '?foo=bar'
      const params = new URLSearchParams(search);
      const foo = params.get('foo'); // bar
      

      (请记住,Internet Explorer 不支持URLSearchParams()

      【讨论】:

      • 感谢有关 URLSearchParams() 和 IE 的提醒
      • 另外注意,如果你使用create-react-app,你必须使用query-string v5 - npm install query-string@5
      猜你喜欢
      • 2017-06-26
      • 2022-01-10
      • 2022-01-16
      • 2017-05-07
      • 2017-08-14
      • 2016-01-01
      • 2018-08-25
      • 2015-04-12
      • 2020-10-15
      相关资源
      最近更新 更多