【发布时间】:2018-02-24 09:06:33
【问题描述】:
我刚刚注意到,在 react 路由器 (v3.x) 中,如果路径参数发生更改,组件会卸载并重新安装。这是预期的行为吗?
路线:
<Route path="/landing/register/:step" component={Register}/>
现在,假设我在路线 "/landing/register/personal-data" 上,我正在通过 <Link/> 或 router.push({...}) 导航到下一个注册步骤 "/landing/register/address",Register 组件首先被卸载,然后再次安装,失去了它的所有状态。
这是正确的方法还是我做错了什么?
编辑:
似乎问题在于我使用的是嵌套路由,其中我使用了一个组件作为父路由。
此示例有效(在路径参数更改时不重新安装 Register-Comp):
<Route path="/landing">
<Route path="register/:step" component={Register}></Route>
</Route>
但是当我为父路由使用组件时,它不会(不是重新安装 AppView-Comp,而是在路径参数更改时注册-Comp):
<Route path="/landing" component={AppView}>
<Route path="register/:step" component={Register}></Route>
</Route>
【问题讨论】:
-
您可能需要更改this answer 以了解组件卸载/重新安装在 URL 参数上的变化
-
我认为这将我引向正确的道路(请参阅我编辑的问题)。父组件
AppView收到新的道具,并正在触发重新渲染,导致重新安装子组件。我想我必须存储其他状态,或者检查shouldComponentUpdate
标签: javascript reactjs react-router