javascript - 当提供查询参数时,React 查询字符串显示 404

标签 javascript reactjs react-router-dom

我是 React 新手,并尝试根据名称查询呈现页面,例如 http://localhost:3000/show?name=james

所以我最初将路线添加为:

<BrowserRouter>
<Switch>    
<Route path='*' component={ErrorComponent} />} />
<Route path="show(/:name)" name="name" component={Show}></Route>
</Switch>
</BrowserRouter>

然后我尝试渲染组件 Show,如下所示:

import React, { Component } from 'react';
import queryString from 'query-string';
class Show extends Component {
  componentDidMount(){
    console.log(this.props.location.search);
    const values = queryString.parse(this.props.location.search);
    console.log(values.name);
  }


  render() {
    const { params } = this.props.match;
    return <div>
      <h4>About</h4>
      <p>This is About page.</p>
      {params.id ? <b>ID: {params.id}</b> : <i>ID is optional.</i>}
    </div>
  }
}

export default Show;

然后当我尝试显示页面时

http://localhost:3000/show?name=james

总是显示404。不知道我哪一部分做错了。任何帮助表示赞赏。 我也在使用react-router-dom 5.1.2。 谢谢。

最佳答案

path="show(/:name)"

这不是可匹配的有效 URL 路径。

重新定义["/show/:id", "/show"]的路径

<Route path={["/show/:id", "/show"]} name="name" component={Show} />

由于 Route 直接渲染组件,因此它可以直接从 props 中提取查询参数和匹配参数 (this.props.match.params & this.props.location.search)。指定两个匹配路径相当于定义两个渲染同一组件的独立Route。相同的规则适用于路径特异性,因此首先在数组中定义更复杂的匹配。

class Show extends Component {
  componentDidMount(){
    console.log(this.props.location.search);
    const values = queryString.parse(this.props.location.search);
    console.log(values.name);
  }

  render() {
    const { params } = this.props.match;
    return <div>
      <h4>About</h4>
      <p>This is About page.</p>
      {params.id ? <b>ID: {params.id}</b> : <i>ID is optional.</i>}
    </div>
  }
}

Edit frosty-banach-9ou2q

关于javascript - 当提供查询参数时,React 查询字符串显示 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61023787/

相关文章:

javascript - 如何在 Javascript 中执行线程

javascript - 使用 Webpack 和 mocha-loader 在浏览器中从 React 应用程序运行 Mocha 规范

reactjs - Auth0 getTokenSilently 返回未定义

javascript - nextProps 始终与 componentWillReceiveProps 中的 this.props 相同,即使 props 已更改

javascript - react 路由器导航链接不会在路线更改时更新

reactjs - <Outlet/> 无法使用 React router v6 重新渲染

javascript - 根据缩放级别显示标签

javascript - 如何将图像和文章一起显示而不将它们硬编码为单独的页面?

javascript - 正则表达式:如果前面没有单词,则匹配短语

javascript - ReactJS - 我无法通过 Route 为子组件传递 Prop