reactjs - React Router 在能够刷新页面的同时传递不在 URL 中的道具
问题描述
在我的应用程序中,我有一长串城市,每个城市都有一个对应的 ID。以前,我使用这样的 url 参数:
<Route exact path="/:cityid" component={SearchPage} />
但是,现在我想在 url 中使用城市名称本身,以便它是/vancouver而不是/ab6e0d97。我可以让它正常工作,但是当我想在以下页面之一中使用 cityid 时,我的问题就出现了。以前,我是这样传递cityid的:
props.history.push({
pathname: `/${cityid}/personalize`
})
并使用props.match.params
. 现在,我有这个:
props.history.push({
pathname: `/${city}/personalize`,
state: { cityId }
})
从/:city/personalize
,我可以通过 访问cityId props.location
。但是,刷新时,我失去了props.location
和 cityId 成为定义。我需要这个 cityId 才能发出获取请求以获取与 cityId 关联的所有项目。
我想这是一个常见问题,但无法找到令人满意的答案,因为我需要两件事:1)网址中的城市名称 2)应用程序部分需要它的城市 ID,没有它通过 URL 传入
解决方案
我认为在这种情况下您无能为力,因为只有最初输入页面时拥有的数据是 url 中的信息(在您的情况下为城市名称)。
您可以按照评论中的建议使用本地存储来保持名称和 ID 之间的映射,但它的解决方案非常棘手 - 想象一下将您的 url 发送给其他人 - 他的本地存储中没有任何内容,并且在打开该页面时出现错误。
您最好的选择是更新您的后端(如果您可以控制后端)以启用按名称获取(因为它们应该是唯一的,对吗?)。然后,一旦用户/:city/personalize
使用来自params
.
推荐阅读
- angular - 如何让 WebStorm 识别并为自定义 Angular 库中的组件名称提供自动完成功能?
- ios - React 本机 Ios 应用程序在 ios 12.1 或更低版本上崩溃
- python - 如何使用结构化流基于 pyspark 中的连续出现对数据进行计数和分组
- python - 如何拆分和删除列表中的字符串?
- java - 我们不能将 void 数组转换为 int 数组吗?
- sql - 在 SQL 中插入一个百分比到 MS Access
- c# - ActionResult 扩展不适用于 Page() ActionResult 方法
- ios - Swift 中的暂停和恢复定时器
- java - 如何提取写在Java文件中的数据的结尾
- python-3.x - 在 python 中为 Mac 中的 google bigquery 设置环境变量