【问题标题】:React: pass a query string into a pathReact:将查询字符串传递到路径中
【发布时间】:2020-07-31 20:45:12
【问题描述】:

我正在尝试应用这篇文章中给出的答案 How to parse a query string in React Router

但它不起作用。

这是我的网址:

`/api/lexemes?searchTerm=${searchTerm}&optionValue=${optionValue}`

首先,当我运行此代码时没有任何显示:

let search = window.location.search;
let params = new URLSearchParams(search);
let foo = params.get('searchTerm');
console.log(foo);

这个也没有:

let url = this.props.location.search;
let params = queryString.parse(url);
console.log(params);

当我这样做时:

console.log(this.props);

控制台显示带有搜索=“”的位置

请注意,我使用的是类组件,它只适用于功能性组件吗?如果你能告诉我如何使用类组件来做到这一点,那就太好了。

我在 App.js 中的路径现在看起来像这样:

<Switch>
          <Route exact path="/" component={Main} />
          ...
</Switch>

我想要的是:

<Route exact path="/:search/:option" component={Main} />

这是我在 Main.js 中的 axios 调用

handleSubmit = (searchTerm, optionValue) => {
axios
  .get(`/api/lexemes?searchTerm=${searchTerm}&optionValue=${optionValue}`, {

  })
  .then(
    (res) => {
      if (Array.isArray(res.data) && res.data.length === 0) {
        this.setState({
          noData: 1,
        });
      } else {
        this.setState({
          words: res.data,
          currentScreen: "WordItem",
        });
      }

    },
    (error) => {
      alert("handleSubmit error " + error);
    }
  );

};

【问题讨论】:

  • withRouter HOC 包裹你的组件。然后,您可以在 location 属性中访问查询字符串
  • 我已经这样做了

标签: reactjs string parameters routes


【解决方案1】:

在这种情况下,如果你想使用

<Route exact path="/:search/:option" component={Main} />

这是 App.js 的代码

import React from "react";
import "./styles.css";
import { Switch, Route, BrowserRouter } from "react-router-dom";
import { Main } from "./Main";

export default function App() {
  return (
    <BrowserRouter>
      <Switch>
        <Route path="/:search/:option" component={Main} />
      </Switch>
    </BrowserRouter>
  );
}

这是Main组件的代码:

import React, { Component } from "react";

class Main extends Component {
  render() {
    console.log("location match params", this.props.match.params);
    return <div>Home</div>;
  }
}

export { Main };

这是类组件,您可以从主组件访问参数。

代替

let url = this.props.location.search;
let params = queryString.parse(url);
console.log(params);

使用this.props.match.location 访问来自&lt;Route exact path="/:search/:option" component={Main} /&gt; 的参数

【讨论】:

  • 我应该将“this.props.match.location”放在 App.js 还是 Main.js 中的什么位置?这将如何影响路由路径?
  • 在 Main.js 中。我在答案中留下了 Main.js 代码。现在在 Main 您可以访问参数。如您所见,我离开了 console.log 以向您显示值。这是在 React-router 类组件中访问 param url 的正确流程
  • 再次抱歉这个愚蠢的问题:但在 Main.js 中只有一个 console.log("location match params", this.props.match.params);返回
    首页
    ;我想了解如何将记录参数传递到 App.js 中的 Route
  • 对不起,我不太明白。您想知道如何在 Main 中接收参数吗?如果您愿意,我们可以使用聊天来讨论那里的问题
  • 希望大家聊完后能理解。如果您需要其他东西,我会保存代码沙箱:)
猜你喜欢
  • 1970-01-01
  • 2010-12-25
  • 2017-09-09
  • 2017-05-13
  • 1970-01-01
  • 2018-12-02
  • 2016-05-22
  • 1970-01-01
相关资源
最近更新 更多