【发布时间】:2019-07-12 11:32:30
【问题描述】:
我正在做一个个人项目,几天以来我一直被反应路由器问题困扰。
我正在获取 API 并尝试使用单个 id 呈现路由,因此当我单击卡片链接时一切正常,但是一旦尝试在新选项卡上手动呈现链接,例如我得到了控制台错误
TypeError: Cannot read property 'position_name' of undefined
| const Articles = ({ location }) => (
5 | <ArticleComponent
> 6 | position_name={location.state.position_name}
7 | workplace_name={location.state.workplace_name}
这是我在 APP.js 文件中的路线
<Switch>
<Route exact path="/" component={JobCard} />
<Route path="/jobs/:_id" component={Articles} />
</Switch>
以及我获取卡片的组件。
<div key={job._id} className="blog-card">
<div className="description">
<Link
className="link-apply"
to={{
pathname: `/jobs/${job._id}`,
state: job
}}
>
<h5 className="position-name">{job.position_name}</h5>
<p className="place">{job.workplace_name}</p>
<p className="location-job">{job.location}</p>
</Link>
</div>
所以我想要实现的是能够在我手动输入链接时呈现文章,例如:http://localhost:3000/jobs/5ccc770c6ac54350001f0954
但由于某些原因,它仅在我单击卡片时才会呈现。
提前感谢您的帮助
【问题讨论】:
-
我不使用 React Router,但我感觉状态可能是使用历史状态来存储它,这对新窗口无效。尝试改用查询参数。
-
您的 .htaccess 似乎有问题
-
我认为这是因为我无法刷新状态,但我不知道如何以任何其他方式解决此问题,当我在邮递员中获取单个 id 时它正在工作
-
当通过点击您的卡片调用您的页面时,您在
<Link>组件中设置状态:state: job。但是当输入你的 url 时,你并没有发送所需的附加信息(你的state键),所以你的组件无法读取它(实际上它是未定义的)。如果您需要通过键入 url 来发送信息,则该信息必须包含在 URL 参数中,或者可以通过 URL 参数访问。因此,您的position_name和workplace_name必须与job_id一起在您的URL 中,或者job_id必须允许您执行某种数据库查询来获取这些信息。 -
你知道我怎么能做到这一点,因为我现在很迷茫,我可以通过我的数据库中的单个 id 访问元素
标签: javascript reactjs react-router react-router-v4