react请求接口数据是在componentDidMount 还是componentWillMount周期好?

#1

刚接触react不久,所以想请教一下,请求数据是在组件加载前或者加载后再去求情数据,哪种方式会好一些?

#2

ajax是异步的,放在哪请求都行

#3

参考:componentDidMount()

#4

谢谢你的回复

#5

谢谢你的回复 凑够

#6

差别不大,死倔求那0.00000几毫秒的话,是componentWillMount快一点。。。
我也是用这个。我就倔!

#7

可以的,大兄弟。:laughing:

#8

取决于你的应用场景。

一般我在componentDidMount中获取异步数据。此时有若干细节需要处理。

比如,你调用的API返回一个JSON对象,而你要在render中以obj.prop的方式显示其中的一个属性,那么需要声明一个空的obj

如果你的组件需要渲染子组件,而且子组件取决于父组件的某个属性,那么在子组件的componentDidMount中进行处理会有问题:因为此时父组件中对应的属性可能还没有完整获取。在此时我会在子组件的componentDidUpdate中处理。

1 Like
#9

从react的渲染原理来说,放在componentDidMount里面是最好的,但是对于同步的状态改变,是可以放在componentWillMount,异步的话最好放在componentDidMount,为什么?

componentWillMount里面状态改变并不会触发再次更新,而componentDidMount里面state的变化会触发更新,所以对于请求远程数据的,尽量放在componentDidMount,这样状态变化后,界面也会更新,而放在componentWillMount,有可能界面不会更新

react github isssuse

3 Likes
#10

componentWillMount是可以去掉的了。基本所有能在willMount需要做的同步任务都可以在constructor实现。

componentWillMount 是不能写异步等副作用任务的,出于2方面考虑:

1、 componentWillMount 是 ssr 里唯一执行的生命周期函数,如果你在这里subscribe了,那你写在willUnmount的unsubscribe方法就不会执行了。

2、fiber reconciler 有可能需要暂停这个函数提高render的优先级… 如果你写了异步任务,就没法暂停了。

1 Like
#12

好的,知道了。谢谢

#13

:slight_smile:好的,谢谢:slight_smile:

#14

好的,谢谢。

#15

子组件props是父组件异步调用接口生成的,子组件没法调用,如何阻止子组件在父组件接口调用成功前渲染?

#16

子组件props是父组件异步调用接口生成的,子组件没法调用,如何阻止子组件在父组件接口调用成功前渲染?
子组件props是父组件异步调用接口生成的,子组件没法调用,如何阻止子组件在父组件接口调用成功前渲染?

#17

react异步数据如ajax请求应该放在哪个生命周期?
参考这个写的!