react学习笔记(四) 组件常用的生命周期方法

React的每个组件都有自己的生命周期,我们可以利用这些生命周期对应的方法,在组件的不同时期触发特定的方法,来达到我们想要的效果

生命周期

在这里插入图片描述

constructor

constructor方法会在挂载时被首先调用,事实上,如果我们不需要去初始化state或者进行方法绑定,我们完全可以不为组件构造该函数
使用constructor时,要注意要先在开头写上super(props),否则this.props在构造函数中可能会出现为定义的bug
在constructor中,我们一般只会去初始化state和为方法绑定this

constructor(props) {
  super(props);
  // 设置state
  this.state = { counter: 0 };
  // 绑定this
  this.handleClick = this.handleClick.bind(this);
}

要注意的是,与在其他地方设置state相反,在constructor中,我们要使用this.state={}来设置state,而不是使用this.setState({})来设置

componentDidMount

componentDidMount() 会在组件挂载后(插入 DOM 树中)立即调用,如果我们要在组件初始化时进行什么操作,就可以放在这里执行
可以在componentDidMount中使用setState来修改state的值,但是这样会触发额外的渲染,此渲染会发生在浏览器更新屏幕之前,所以用户不会发现其中发生了两次渲染,但是这种做法会导致性能问题,一般情况下在constructor中初始化好state即可
如果使用发布-订阅的设计模式,可以在这里添加订阅,定时器也可以在这里设置,但是要注意在componentWillUnmount中取消订阅和关闭定时器

componentDidUpdate

componentDidUpdate() 会在更新后会被立即调用,首次渲染不会执行此方法。不管更新的内容是否会被渲染在页面上,都会调用这个方法,即使修改后内容相同也会调用该方法

class MyComponent extends React.Component {
     constructor(props){
         super(props);
         this.state={
             number:1
         }
     }
     handleClick(num){
       this.setState({
           number:num
       })
     }
     componentDidUpdate(){
         console.log(1111)
     }
     render(){
         return <div>MyComponent{this.state.number}<button onClick={this.handleClick.bind(this,2)}>click</button></div>;
     }
 }
 ReactDOM.render(
       <MyComponent/>,
       document.getElementById('root')
 );

这里虽然没有将state中的number渲染出来,但是仍然会打印出111,多次点击,即使number已经变成2了,依然会一直打印出111
在componentDidUpdate中也可以使用setState修改state的值,但不能直接修改,至少要放在条件语句中,不然就会陷入死循环中,状态被改变->触发componentDidUpdate->触发其中的setState->状态又被改变->…

componentWillUnmount

componentWillUnmount() 会在组件卸载及销毁之前直接调用,一般会在这里将设置的定时器关闭,取消订阅事件,取消网络请求等
在componentWillUnmount()不要试图调用setState去修改state,因为该组件即将被销毁,不会再重新渲染/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值