Reactjs 检测ES6类中的React路由器转换

Reactjs 检测ES6类中的React路由器转换,reactjs,react-router,Reactjs,React Router,我试图检测单击导致的路由更改,以便在路由更改时更改组件的状态。我看到很多地方建议您可以使用router.addTransitionHook,但我在这方面有一些问题 我找不到任何关于addTransitionHook的真正文档,听起来像是这样 我想不出如何进入路由器。假设它在构造函数中的context.router下可用。我尝试了所有建议(即Component.contextTypes={router:React.PropTypes.func.isRequired}),除了context.rout

我试图检测单击
导致的路由更改,以便在路由更改时更改组件的状态。我看到很多地方建议您可以使用
router.addTransitionHook
,但我在这方面有一些问题

  • 我找不到任何关于
    addTransitionHook
    的真正文档,听起来像是这样
  • 我想不出如何进入路由器。假设它在构造函数中的
    context.router
    下可用。我尝试了所有建议(即
    Component.contextTypes={router:React.PropTypes.func.isRequired}
    ),除了
    context.router的
    未定义的
    之外,我什么都没有得到。当我创建路由器时,我是否需要做些什么,以便组件能够访问
    上下文
  • 有几个建议的解决方案涉及混合。提供了对
    routerWillLeave
    的访问。这似乎是我想要的,但在ES6类中没有mixin

    当我按照描述创建路由器时,也许我应该尝试定义
    onEnter
    ,但我不想在路由器声明中添加任何代码。这似乎不是一个好的解决方案


    tldr在ES6类中检测反应路线更改的最佳方法是什么?

    如果我正确理解了您的意思,您希望使用模块中的
    前面列出的
    功能

    所以你可以像这样使用它:

    history.listenBefore((位置)=>{
    // ...
    });
    
    或者,如果需要异步转换,则:

    history.listenBefore((位置,回调)=>{
    // ...
    });
    

    查看文档中的更多信息。

    我从未想过如何使用事件来解决问题,但我意识到我应该使用生命周期方法。我的路线是
    。我真正关心的是当
    urlKey
    param发生变化时,组件的道具也会发生变化。因此,我能够将代码放入
    组件WillReceiveProps
    生命周期方法中。

    React Router V4不支持history.listenBefore。而是使用history.block来阻止转换。和
    history.listen((位置、操作)=>{//do something})
    用于侦听路由转换。检查此处的文档

    为了获得与Lifecycle mixin相同的功能,您应该将其放在哪里?它需要在组件内部运行。但是,将其放入组件的构造函数中会在每次创建组件时创建一个新的listenBefore回调。