【发布时间】:2017-08-26 13:03:02
【问题描述】:
过去 1 年我一直在研究 react。我们遵循的约定是在componentDidMount 中进行API 调用,获取数据并在数据到达后设置状态。这将确保组件已安装并且设置状态将导致重新渲染组件但我想知道为什么我们不能在componentWillMount 或constructor 中设置状态
官方文档说:
componentWillMount() 在安装发生之前立即调用。它 在 render() 之前调用,因此在此方法中设置状态将 不会触发重新渲染。避免引入任何副作用或 此方法中的订阅。
上面写着setting state in this method will not trigger a re-rendering,这是我在进行 API 调用时不想要的。如果我能够获取数据并能够在componentWillMount 或constructor 中设置状态(假设API 调用非常快)并且数据存在于第一个渲染中,我为什么要重新渲染有吗?
如果 API 调用很慢,那么 setState 将是异步的,并且 componentWillMount 已经返回,那么我将能够 setState 并且应该会发生重新渲染。
总的来说,我很困惑为什么我们不应该在构造函数或 componentWillMount 中进行 API 调用。有人真的可以帮助我了解在这种情况下 react 是如何工作的吗?
【问题讨论】:
-
如果您需要,请在
componentWillMount中调用 API,这不错,但是在调用第一次渲染之前,不可能从 API 获得响应并设置适当的状态。 -
@elmeister - 如果您的 API 通过缓存层,您可能能够同步获取查询的缓存结果。
-
相关帖子here.
标签: javascript reactjs