【发布时间】:2017-07-26 16:25:44
【问题描述】:
当对两个路由使用相同的组件时,如何在路由更改时重新安装组件?
这是我的代码。
routes.jsx
<Router history={browserHistory}>
<Route path="/" component={Home} />
<Route path="/foo/:fooId" component={Home} />
</Router>
我在Home 组件中对fooId 进行了条件检查,从而相应地呈现 JSX。
<Link to="/foo/1234">fooKey</Link>
此时,当点击fooKey 时,路由发生变化,Home 组件中的渲染功能被重新触发,但没有再次挂载。
我查看了提到componentWillReceiveProps 的其他答案,但我在constructor 中有很多配置,我不想将所有这些配置移动到componentWillReceiveProps。
如果需要更多信息,请发表评论。
【问题讨论】:
-
强制卸载是 React 中的反模式。 componentWillReceiveProps 是执行此操作的正确方法,然后您的代码将匹配其他读者/贡献者的期望。
-
同意,没有好的方法可以做到这一点,即使有,你也不应该这样做。如果构造函数中有配置或数据在实例化后需要可变,则应将其移出构造函数并移入
state。 -
感谢您的建议。如果您能指出有关不应重新安装组件的更多解释,那将很有帮助。很明显会降低性能但还有其他原因吗?
-
我的意思是,它完全违背了 React 组件生命周期的预期使用方式。这有点像问“为什么我不应该用螺丝刀而不是锤子来敲这个钉子?很明显它会降低性能,但还有其他原因吗?” :P
-
强比喻,我必须说!但是,我仍然不相信这违反了 React 组件生命周期的使用。重新安装只会从头开始重新安装过程,这当然是一种浪费,我同意这一点。
标签: reactjs react-router