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回调。