constructor()
- 初始化
props
- 初始化
state
,但此时并不能调用setState
- 用于写
bind
- (
constructor
不写也可以,要写就写完整)
shouldComponentUpdate()
根据返回值来判断是否更新UI,在开发过程中,可以根据应用场景灵活设置返回值,避免不必要的更新
(shouldComponentUpdate
接受两个参数,第一个参数为newProps
,第二个为newState
)
render()
- 展示视图
- render中只能有一个根元素,若有两个根元素,可以使用
<React.Fragment>
包起来 - 嫌太长?
<React.Fragment></React.Fragment>
可以简写为<></>
使用技巧:
- 里面可以写
if...else
- 可以写?:表达式
- 不能直接写for循环,需要配合数组使用
- 可以写
array.map
componentDidMount()
- 在元素插入(挂载到)页面后执行这些代码,这些代码依赖DOM
- 如果想获取div的高度,最好就写在这里面
- 此处可以发起加载数据的AJAX请求(官方推荐)
- 首次渲染就会执行该钩子
componentDidUpdate()
- 在视图更新后执行代码
- 此处也可以发起加载数据的AJAX请求,用于更新数据
- 首次渲染不会执行该钩子
- 在此处使用
setState
有可能引起无限循环(setState
导致更新,更新又触发setState
,setState
又导致更新,两者不停的相互调用),除非放到条件判断中,所以不太建议在这里使用setState - 若
shouldComponentUpdate()
判断返回了false
,则ui不会更新,该钩子也不会触发
可接受三个参数,详细可查看文档
componentWillUnmount()
- 组件将要被移出页面然后被销毁(卸载)时执行代码
- unmount过的组件不会再次mount了
如果之前在componentDidMount()
中进行了监听、计时器或AJAX请求,则一定要在该钩子中取消请求,否则会浪费内存
//很多网站越来越占内存也可能跟这个有关,也许可以不写,但一定要知道