前面我们了解到了React组件有函数组件和class组件两种,对比来说class组件功能更加丰富。接下来简单学习一下class组件有哪些方法。
Constructor
class组件的构造函数,它主要有两个用处,第一初始化state,第二是做函数的绑定。比如class组件中有处理点击事件的方法 handleClick(),就需要在构造函数中
this.handleClick = this.handleClick.bind(this)
在构造函数中需要注意以下几点:
1、 在其他语句之前调用super(props),否则会报错
2、不要在构造函数中调用this.setState,也不能在初始化state时使用this.props中的值。
componentDidMount
componentDidMount会在组件挂载后立即调用。componentDidMount适合添加订阅。有一个需要注意的点,componentDidMount是在render之后挂载的,所以在componentDidMount中请求接口返回数据给render显示,需要在构造函数中初始化数据类型,否则会出现undefined的错误。
componentWillUnmount
这是在组件准备卸载前会调用这个方法,用于取消componentDidMount中的订阅,销毁之前的调用等。
render
render是一个class组件中必须的一个方法,如果我们在组件渲染时做一些额外的准备工作,可以不需要定义construstor,componentDidMount,componentWillUnmount事件等。
组件挂载顺序
前面提到过组件挂载时render会比compinentDidMount之前调用,现在我们看下组件挂载过程中具体的方法调用顺序:
constructor
static getDerivedStateFromProps()
render
componentDidMount
static getDerivedStateFromProps()会在初始化完成之后 render调用之前调用。它的适用条件比较罕见,只在state需要跟props做全绑定时才会使用。我们知道在初始化state时其实就是将给state赋了一个初始值,此时的state和props不相等。state的值完全取决于props时才会用的static getDerivedStateFromProps方法。
网友评论