根据@ wei,@ Breakpoint25和@PaulusLimma的回答,我为制作了此替换组件<Route>
。URL更改时,这将重新安装页面,迫使页面中的所有组件都被创建并重新安装,而不仅仅是重新呈现。所有componentDidMount()
其他所有启动挂钩也都在URL更改时执行。
这个想法是key
在URL更改时更改组件属性,这将迫使React重新安装组件。
您可以将其用作的替代产品<Route>
,例如:
<Router>
<Switch>
<RemountingRoute path="/item/:id" exact={true} component={ItemPage} />
<RemountingRoute path="/stuff/:id" exact={true} component={StuffPage} />
</Switch>
</Router>
该<RemountingRoute>
组件的定义如下:
export const RemountingRoute = (props) => {
const {component, ...other} = props
const Component = component
return (
<Route {...other} render={p => <Component key={p.location.pathname + p.location.search}
history={p.history}
location={p.location}
match={p.match} />}
/>)
}
RemountingRoute.propsType = {
component: PropTypes.object.isRequired
}
这已经通过React-Router 4.3进行了测试。