我刚开始使用反应路由器,结果非常好。我通常做后端,但我与前端团队合作创建了我们的第一个完全同构的应用程序。
我们有一个看起来像这样的简单路由器
<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的响应触发一些操作,并告诉路由器跳过当前路由并开始评估链?
可能这是一个边缘案例,但我相信它有一些用途。
感谢所有可能的回复。