我有这种情况。
- 用户在
/company/<company-id>
地址栏中输入。 - 由于应用程序与后端完全分离,因此它需要预取公司。
- 正常的用户流是
/login
->/company/
。我很好地处理了这个案例,/company/<whatever id is first in the prefetch>
并且没有问题地导航到。 - 但是如果你用 id加载呢?我有解决方案,但我觉得我在路由中误解了一些东西。
companyState.success
您可能会假设我的预取有效,并且下面的代码片段只有在为真时才会触发。就像我说的,它正在工作。我手动处理了这个,通过
// pretty sure i can handle this with regex better to capture other cases
// but that's beside the point for the scope of this question
const urlId = +location.pathname.replace("/company/", "")
const checkCompany = !!companyState.data.find(d => d.id === urlId)
if(checkCompany){
company.set(urlId)
}
else{
navigate("/404")
}
我有钩子,如果company.set(<company:id>)
确实更新,它将预先获取视图所需的所有其他内容。而且,company
是一个自定义上下文挂钩,因此它在我的应用程序中无处不在。
有没有更好的方法来处理这个问题?手动检查路径名似乎是 hack-y。您可以假设 mygatsby_node.js
具有正确的定义以允许客户端路由。
这是我的路由定义:(这是我放在 pages 文件夹中的内容)
const DashboardPage = () => (
<ProtectedRoute>
<Router>
<Company path="/company/*" />
</Router>
</ProtectedRoute>
)
最后在组件文件夹中,
const Company = ({location}) => (
<Router>
<Main path="/:companyId">
<Summary path="/" />
.... other dashboard routes
</Main>
</Router>
)