我使用react,alt.js和react-router,并使用基本CRUD构建应用程序。有一个菜单项为"创建项目",它会调出一个模态(使用react-bootstrap ...)并在提交时触发一个动作在后端创建一些模型,然后执行browserHistory.push
(在react-router docs中推荐)完成后,转到新创建项目的项目页面。
所以在基本情况下,这是有效的。例如,如果我在主应用页面上工作。但是,如果我已经在其他项目的项目详情页面上(让我们说我在/item/1
并且我刚刚创建了/item/2
,那么我尝试重定向到来自第/item/2
页的/item/1
)。
我的异步加载逻辑(至少,fetchItem
的动作调用)位于componentDidMount
反应组件的ItemViewPage
中,根据所有示例,这似乎很典型我可以在网上找到。
问题是,如果页面当前已经呈现,则永远不会调用componentDidMount
,因为该组件已经挂载(!)。因此,我的网页网址更新为/item/2
,但内容仍为/item/1
。
所以,我的问题是....是的。从componentDidMount
启动数据加载是错误的吗?我应该做一些其他的生命周期方法(比如componentWillReceiveProps
,因为反应路由器会设置一个新的id)?或者是否还有一些其他地方完全可以解决数据加载问题(例如,反应路由器是否具有某些功能我不知道处理此问题)?
答案 0 :(得分:2)
由于React很聪明,并且知道您为路径重新使用该组件,因此该组件将保持挂载状态。您选择的生命周期方法将无法处理该作业,因为它会在初始安装组件时调用一次。
我建议您使用componentWillReceiveProps
,然后在那里,您可以检查项目的id
字段是否已更改。这意味着您应该更新,因为要呈现新的不同数据。