如何识别react-router Handler在它进入视图之前是NotFound?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何识别react-router Handler在它进入视图之前是NotFound?相关的知识,希望对你有一定的参考价值。

我正在开发一个小样板项目,使用node&express与ReactJS进行服务器端渲染。

我想知道如何识别我的回调中的Handler变量何时表示NotFound工厂,因此我可以使用express抛出404错误。像:res.status(404)

router.run(function(Handler) {

    // HOW TO KNOW `Handler` corresponds to `NotFound`?
    // I WANT TO USE SOMETHING LIKE `res.status(404)` HERE...

    // Render React to a string, passing in our fetched tweets
    var markup = React.renderToString(
        Handler(state)
    );

    // Render our 'home' template
    res.render('index', {
        markup: markup, // Pass rendered react markup
        state: JSON.stringify(state) // Pass current state to client side
    });
});

如果您想要完全查看该文件,请随时访问github上的页面:https://github.com/sergiocruz/react-boilerplate/blob/master/server.js

如果您对此感到好奇,也可以随意浏览整个项目:https://github.com/sergiocruz/react-boilerplate

答案

Handler参数实际上是路由器组件。如果将第二个参数添加到回调state,则可以评估路径。

router.run(function(Handler, state) {
    console.log(state.routes);
    ...
}

routes属性是一个数组,其中包含与请求匹配的每条路径的一个元素,按照它们嵌套在路由映射中的顺序。

如果查看路径数组中的元素,您将看到可以评估pathname(路径名称),handler对象等属性。

以上是关于如何识别react-router Handler在它进入视图之前是NotFound?的主要内容,如果未能解决你的问题,请参考以下文章

在带有 webpack 的 React-Router 中使用嵌套路由的问题

使用带有打字稿的 react-router

react-router 未渲染的嵌套详细信息路由

如何在运行 CLI 和 Apache2Handler 时将系统环境变量导入 PHP?

如何在 react-router 中使用普通的锚链接

如何使用 react-router 重新加载页面?