React中state初始化时调用的函数对应哪个生命周期阶段?
问题描述
在React类组件的state初始化阶段直接调用函数,代码如下:
state = { student: getstudent() }
上述代码中的getstudent()函数会在React的哪个生命周期阶段内运行?
答案
这个getstudent()函数会在类组件的实例化构造阶段运行,属于类初始化逻辑的一部分,早于所有正式的React生命周期钩子执行,具体时序如下:
- 你所使用的
state = {}写法属于ES6+的类公共字段语法,在编译后会被注入到类的构造函数中,执行时机紧跟super(props)调用之后,属于constructor构造函数的执行范围 - 执行时间早于旧版废弃生命周期
componentWillMount/UNSAFE_componentWillMount - 远早于
render、componentDidMount等后续生命周期阶段
注意事项
如果getstudent()存在副作用、依赖props或者其他状态值,不推荐直接在state初始化时调用,这种写法容易出现预期外的错误,推荐移到对应生命周期中通过setState赋值,示例如下:
componentDidMount() { this.setState({ student: getstudent() }) }
如果
getstudent()是无副作用的纯函数,仅用来计算初始state默认值,直接在state初始化时调用是可以的。
内容的提问来源于stack exchange,提问作者Mohammad Eslahi
相关产品推荐
相关产品推荐

