React路由器,显示404不存在的资源

时间:2016-06-20 10:14:34

标签: react-router

我刚开始使用反应路由器,结果非常好。我通常做后端,但我与前端团队合作创建了我们的第一个完全同构的应用程序。

我们有一个看起来像这样的简单路由器

<Route path="/" {...props} component={AppContainer}>
  <IndexRedirect to="/home" />
  <Route path="/home" component={StaticContainer} require={loadStaticPage} />
  <Route path="/contact" component={StaticContainer} require={loadStaticPage} />
  <Route path="/:resource" component={ItemsContainer} require={loadItems} />
  <Route path="/:resource/:slug" component={ItemContainer} require={loadItem} />
</Route>

所有资源都是从CMS动态获取的(我们将其与现有系统集成),我们的主要问题是如何处理未找到的案例。

在过去,我有一个快速的应用程序呈现所有内容,我做了一些看起来像这样的事情

router.get('/resource/:slug', (req, res, next) => {
  const resource = normallyNotSynchronousCall(req.params.slug);
  resource ? res.render('something', { resource }) : next();
});

因此,在非现有资源的情况下,我只调用了next(),它最终会到达最后一条路线,这只是一个捕获所有渲染404页面的路径。

我知道我们可以在反应路由器中拥有相同的想法,并将其添加为最后一条路线以捕捉所有内容。

<Route path="*" component={NotFoundContainer} />

但是,如果从CMS动态获取资源,则无法使用此功能。有没有办法在反应路由器中获得等效的next()来跳过当前路由并开始评估下一个路由?所以我可以根据来自CMS的响应触发一些操作,并告诉路由器跳过当前路由并开始评估链?

可能这是一个边缘案例,但我相信它有一些用途。

感谢所有可能的回复。

0 个答案:

没有答案