React Router v4 - 使用不同的查询参数重定向到相同的路由

2024-02-16

设想:

有一个主页,搜索用户将被重定向到带有查询参数(例如 q=abc)的搜索页面。现在在搜索页面上,用户再次尝试搜索不同的值,因此他再次被重定向到相同的搜索页面,但具有不同的查询参数(例如 q=xyz)

Problem:

当我尝试使用不同的查询参数再次从搜索页面重定向到同一路线时,我收到错误“您尝试重定向到当前所在的同一路线”。

预期结果:

用户应该使用不同的查询参数再次重定向到相同的路线,以便在按后退按钮时他可以返回到上一个查询,就像它不是 SPA 时通常的情况一样。结果应该类似于我使用相同组件将用户从 /search/abc 重定向到 /search/xyz 的情况。

可能的解决方案:

在提交搜索查询时,我可以检查它是否是相同的路线,并基于此我可以以某种方式重定向或更新组件状态。此解决方案的问题是用户无法通过单击浏览器的后退按钮返回到上一个查询。我希望该页面被添加到历史记录中。

代码片段:

使用以下代码在主页和搜索页面上都存在的搜索组件内的渲染函数中进行重定向

if (this.state.isReady) {
        let queryString = "q=" + this.state.q;
        return (
            <Redirect push to={`/search/hotels?${queryString}`} />
        );
    }

我认为这是任何具有搜索功能的网站的常见问题,因此应该有一种优雅的方法来处理这种情况,但我无法考虑它。


找到了解决方案:

而不是使用<Redirect />在 React Router 中,我使用历史 api 来推送新路由。

this.props.history.push(`/search/hotels?${queryString}`);

我将 SearchComponent 包装在 withRouter 中,它是 React-Router 提供的 HOC,然后使用历史 api。

代码片段:

import { withRouter } from 'react-router-dom';

class SearchComponent {

    // Component Code goes here

    onSubmit(){
        let queryString = "q=" + this.state.q;
        this.props.history.push(`/search/hotels?${queryString}`);
    }
}

export default withRouter(SearchComponent)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Router v4 - 使用不同的查询参数重定向到相同的路由 的相关文章

随机推荐

  • PeekMessage 收不到消息?

    我创建了一个自定义消息类型 用于调整我的大小Window 称为WM NEED RESIZE 我已在 h 文件中定义它 并在 cpp 文件中初始化 我也注册了我的WindowProc接受消息的功能 以下是这些项目的代码 const uint3
  • 部署在iis上的asp.net core应用遇到500内部服务器错误

    哎呀 500内部服务器错误 启动应用程序时发生错误 当我将数据库功能添加到我的 asp net core 应用程序并将其部署到 iis 时 出现此消息 当我在 Visual Studio 中开发它时 一切都很顺利 但是部署之后就出现了这个错
  • Django 迁移添加默认字段作为模型函数

    我向 Django 模型添加了一个新的 不可为空的字段 并尝试使用迁移来部署该更改 我如何将现有模型使用的默认值设置为这些模型的某个函数而不是常量 举个例子 假设我以前有一个created on字段 我刚刚添加了一个updated on我想
  • 如何创建纵轴(Y 轴)为字符串的图表?

    我想要制作的图表是使用 Chart js 制作的折线图 纵轴为字符串 横轴为数字 例如 横轴是时间 纵轴是帽子的颜色 见下图 var myChart new Chart ctx type line data labels 1 2 3 4 5
  • Gridview动态添加新行

    我有一个文件上传控件 并且有一个按钮 上传 因此当单击通风口触发时 我希望在 gridview 中创建一个新行并获取文件名并绑定到列并将其显示在页面上 请问有什么想法该怎么做吗 这是代码 protected void Button1 Cli
  • Android - 将对象传递给另一个活动

    我正在利用以下类 我将其作为对象 http pastebin com rKmtbDgF http pastebin com rKmtbDgF 我正在尝试使用以下方式传递它 Intent booklist new Intent getBase
  • JDK 1.8.0_92 Nashorn JS 引擎indexOf 行为

    我在 java8 中使用 nashorn javascript 引擎在运行时评估一些表达式 我有一个 util 类 方法如下 public static String evaluateJavaScriptExpression String
  • Android向viewpager添加了圆圈指示器[重复]

    这个问题在这里已经有答案了 您好 我创建了一个视图寻呼机 但有谁知道我如何在页面视图上显示代表分页的圆圈 我认为它提供了一个指示器 但我不完全确定 这是迄今为止包含我的视图寻呼机的代码 public class LevelSelect ex
  • TFS 与 VSTS 的未来

    微软还在开发这两种产品吗 TFS 的开发是否已被放弃而转而支持 VSTS 就上下文而言 我们现在正在使用 TFS 而 VSTS 显然具有更好的集成性 特别是 Microsoft Teams 和 ZenDesk 这对于让我们的工作流程处于更易
  • (Android)如何填充ListView背景并保持标题透明度

    我有一个自定义图像背景 它填充 ListView 后面的整个屏幕 ListView 有一个包含一些数据的标题 然后是一个透明的 10dp 边距 允许我们看到一点背景图像 然后是更多数据 在这个标题下方 在 ListView 的 主体 中 我
  • Laravel 4 查询生成器 - 具有复杂的左连接

    我是 Laravel 4 的新手 我有这样的疑问 SELECT a id active name email img location IFNULL b Total 0 AS LeadTotal IFNULL c Total 0 AS In
  • 使用新的用户名和密码更新 vsts-npm-auth

    我已经安装了vsts npm auth使用以下命令进行打包 npm install g vsts npm auth registry https registry npmjs com 我跑了vsts npm auth config npmr
  • Nuget 4安装在哪里

    Visual Studio 2017 附带 Nuget 4 0 0 但是 它没有放置在路径上 在哪里可以找到使用 CLI 的 nuget 可执行文件 视觉工作室 2017不使用NuGet exe而是使用扩展名NuGet为了达成这个 您应该能
  • 正则表达式解析CSS选择器

    我想解析这个 CSS 选择器 以及其他类似形式的选择器 div class1 myid class2 key value 并让它匹配 class1 和 class2 但我不知道要使用什么正则表达式 例子 http www rubular c
  • 使用 gitlab runner 安装 hostpah 卷的正确方法是什么?

    我需要创建一个卷来公开 maven m2 文件夹 以便在我的所有项目中重用 但我根本无法做到这一点 我的 gitlab 运行程序作为容器在我的 kubernetes 集群中运行 遵循部署和配置图 apiVersion extensions
  • 如何使用 Ms Access 日期/时间扩展数据类型

    访问女士表明有一种名为 日期 时间扩展 的数据类型 其中 日期 时间扩展数据类型存储日期和时间信息 与日期 时间数据类型类似 但它提供更大的日期范围 更高的小数精度以及与 SQL Server datetime2 日期类型的兼容性 但是 我
  • 将一个目录和子目录中的所有文件复制到单个位置[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 以下是将所有 txt 文件从一个位置复制到另一个位置的代码
  • 使用 Objective-C/Cocoa 启动 Mac 应用程序

    使用命令行启动路径查找器应用程序时 我使用open a Path Finder app Users 基于这个想法 我使用以下代码来启动路径查找器 我可以在不使用的情况下启动应用程序吗open命令行 NSTask task task NSTa
  • 恒定值变化

    假设我有一个结构体定义 struct thing thing x int z thing x this z 0 void foo const this gt x gt z 请注意 我创建了一个指向我自己的可变指针 邪恶的笑 然后我可以像这样
  • React Router v4 - 使用不同的查询参数重定向到相同的路由

    设想 有一个主页 搜索用户将被重定向到带有查询参数 例如 q abc 的搜索页面 现在在搜索页面上 用户再次尝试搜索不同的值 因此他再次被重定向到相同的搜索页面 但具有不同的查询参数 例如 q xyz Problem 当我尝试使用不同的查询