Reactjs 反应路由器v4生命周期事件

Reactjs 反应路由器v4生命周期事件,reactjs,react-router,Reactjs,React Router,将我的应用程序升级到React Router v4,我正在努力找到一种干净的方法来实现以前在导航时使用的隐藏弹出菜单的onUpdate逻辑 我在文档中看到的唯一方法是利用该方法,但它似乎比以前复杂得多-有更简单的解决方案吗 const HidePopupThenRoute = ({ component: Component, ...rest }) => ( <Route {...rest} render={matchProps => { hidePopup();

将我的应用程序升级到React Router v4,我正在努力找到一种干净的方法来实现以前在导航时使用的隐藏弹出菜单的onUpdate逻辑

我在文档中看到的唯一方法是利用该方法,但它似乎比以前复杂得多-有更简单的解决方案吗

const HidePopupThenRoute = ({ component: Component, ...rest }) => (
  <Route {...rest} render={matchProps => {
    hidePopup();
    return <Component {...matchProps}/>
  }}/>
)

<HidePopupThenRoute path="/" component={MyComponent}/>
const HidePopupThenRoute=({component:component,…rest})=>(
{
hidePopup();
返回
}}/>
)

< />代码> 我不认为太复杂,但我能理解,在渲染函数内部做命令调用是不正确的。

另一种方法是创建一个
OnUpdate
组件,该组件侦听位置更改并在发生更改时调用某些函数

您可以看到我所写的实现的示例。您可以使用它,也可以使用类似的功能复制您自己的组件。基本上,它所做的就是订阅
history
对象,并在位置更改时调用传递给它的任何函数

constmycomponent=()=>(
我的组件
…

)
相对清洁的解决方案。归根结底,你是从路由器的历史中读取的,它是由React路由器填充的。您可以通过在组件中定义
contextTypes
属性来执行此操作:

静态上下文类型={
路由器:PropTypes.object
};
这将确保路由器连接到该组件。然后,您可以使用该命令从上下文访问路由器及其历史记录,并添加一个在历史记录更改时执行的回调:

this.context.router.history.listen(hidePopup)
您可能希望在
componentDidMount
中执行此操作