【发布时间】:2019-03-05 06:51:25
【问题描述】:
我一直在ComponentDidMount生命周期中提出API's请求,并在回调中调用setState。但是在深入挖掘时,我碰巧发现我们不应该在这个生命周期中调用 setState,因为它会再次触发 render 方法,React 也不建议这样做。
那么在这种情况下,我们究竟应该在哪里发出请求并调用setState 以在之后使用结果?
【问题讨论】:
-
componentDidMount 是正确的。
-
您不正确地在 componentDidMount 中不进行 api 调用。这是进行 API 调用的正确方法
-
即使你在构造函数或 componentWillMount 中调用了在构造函数之前调用的 API 调用,也不能保证在渲染之前收到响应,并且无论如何都会在 setState 上触发重新渲染
-
您可以立即在 componentDidMount() 中调用 setState()。它会触发额外的渲染,但会在浏览器更新屏幕之前发生。这保证了即使在这种情况下 render() 将被调用两次,用户也不会看到中间状态。请谨慎使用此模式,因为它通常会导致性能问题。在大多数情况下,您应该能够在 constructor() 中分配初始状态。 - 反应文档
标签: javascript reactjs