【发布时间】:2020-03-25 09:00:36
【问题描述】:
很长一段时间以来,我一直认为我放在componentDidMount 生命周期方法中的代码只有在组件被挂载时才会被调用。但现在有人告诉我,情况可能并非总是如此。例如,当我在 componentDidMount 方法中获取一些数据时,用户可以导航到另一个组件并导致我的组件卸载。当数据提取完成时,他们告诉我,数据提取后的代码行继续天真地执行,就好像组件仍然挂载一样,这会导致一些令人讨厌的错误。确保我的代码在我的组件被卸载时不运行,并且只有在它被安装时才恢复,这难道不是 react 的工作吗?
【问题讨论】:
-
这是因为获取数据是一个异步任务。逻辑是这样的:组件安装 > 调用异步获取 > 用户更改视图 > 同时异步获取完成并使用新数据调用 setState > 响应尝试相应地更新状态但找不到它了。 React 不能也不应该只是取消你的承诺。
-
为什么调用
setState会报错?如果我的组件不在视图中,为什么允许某些异步任务修改其状态,他们不应该为我检测到吗?
标签: reactjs