加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

react生命周期详解

发布时间:2020-12-15 06:37:52 所属栏目:百科 来源:网络整理
导读:react组件的生命周期的三个阶段 创建阶段、更新阶段、销毁阶段。创建阶段指react组件对应的虚拟dom被创建,react对应的真实的dom结构被创建,并被插入到dom中;更新阶段是由props、state变化或者强制调用forceUpdate引起的dom更新,包括虚拟dom更新,实际dom

react组件的生命周期的三个阶段

创建阶段、更新阶段、销毁阶段。创建阶段指react组件对应的虚拟dom被创建,react对应的真实的dom结构被创建,并被插入到dom中;更新阶段是由props、state变化或者强制调用forceUpdate引起的dom更新,包括虚拟dom更新,实际dom结构更新;销毁阶段是指该组件的销毁,从dom中移除。
react为这三种阶段的不同时机提供了很多钩子,让我们执行对应的操作。下面将详细地介绍一下这些钩子函数。

创建阶段
1.constructor
2.componentWillMount
3.render
4.componentDidMount
更新阶段
1.componentWillReceiveProps
2.shouldComponentUpdate
3.componentWillUpdate
4.render
5.componentDidUpdate
销毁阶段
1.componentWillUnmount
错误发生时
1.componentDidCatch(16新添加)

注意:调用setState方法引起的更新阶段,不会调用componentWillReceiveProps方法,forceUpdate方法引起的更新不会调用componentWillReceiveProps和shouldComponentUpdate方法。

constructor(props)

注意如果存在,要调用super(props),适合初始化state和在this上挂载方法,不要在这里注册事件监听,保证函数没有副作用,在这里面初始化state不用调setState方法,直接给state赋值。this.state={}

render

可以返回React elements、string、number、null、Portals,注意不能返回undefined。Portals是16添加的,

ReactDOM.createPortal(ele,document.getElementById('app')

render方法应该保持pure,不能修改组件状态。

componentWillMount

在componentWillMount后立马触发render,在这个里面调用setState不会触发新的渲染,不要在函数里面引入副作用和事件订阅函数

componentDidMount

获取数据和订阅事件都适合在这里面。这个函数里面的setState会触发新的渲染,但是在浏览器更新屏幕之前发生,也就是说就算render方法在这种情况下调用了两次,用户也不会看见两次不一样的页面

componentWillReceiveProps(nextProps)

可以调用setState方法

shouldComponentUpdate(nextProps,nextState)

默认时返回true,可以使组件继承React.PureComponent,这样在这个方法调用时会对prop和state进行一个浅比较

componentWillUpdate

不能调用setState也不要触发一个会导致更新的操作

componentDidUpdate

适合请求网络获取数据

componentWillUnmount

适合做必要的清除操作,比如使定时器失效,取消网络请求,清除订阅操作

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读