React 之 生命周期(旧)

一.生命周期(旧)

 

总结:

初始化阶段:

 1.constructor()

 2.componentWillMount()

 3.render()

4.componentDidMount()  ===> 常用

      一般在这个钩子中做一些初始化的事,例如:开启定时器,发送网络请求,订阅消息

更新阶段:由组件内部this.setState()或父组件render触发

 1.shouldComponentUpdate()

 2.componentWillUpdate()

 3.render()

 4.componentDidUpdate()

卸载阶段:由ReactDOM.unmountComponentAtNode()触发

 1.componentWillUnmount()

      一般在这个钩子中做一些收尾的事情,例如:关闭定时器,取消订阅消息

 

 简单操作案例: 单个组件的执行顺序

class Count extends React.Component {
      //构造器
      constructor(props)
      {
        super(props)
        console.log('Count--construct')
        this.state ={count :0}
      }
      
      handleAddd = () =>{
        const {count} = this.state
        this.setState({count:count+1})
      }

      handleDeath = () =>{
        // 卸载组件
        ReactDOM.unmountComponentAtNode(document.getElementById('test1'))
      }
      //强制更新按钮的回调
      handleForce =() => {
        this.forceUpdate()
      }

      render(){
        console.log('Count--render')
        let {count} = this.state
        return (
          <div>
            <h2>当前求和为{count}</h2>
            <button onClick={this.handleAddd}>点我+1</button>
            <button onClick = { this.handleDeath }>卸载</button>
            <button onClick = {this.handleForce}>强制更新</button>
          </div>
        )
      }
      //
      death = () => {
        //卸载组件
        console.log('点击卸载')
        ReactDOM.unmountComponentAtNode(document.getElementById('test1'))
      }
      // 组件将要加载
      componentWillMount(){
        console.log('Count--componentWillMount');
      }
      //组件挂载完毕
      componentDidMount(){
        console.log('Count--componentDidMount');
      }
      // 组件将要卸载
      componentWillUnmount(){
        console.log('Count--componentWillUnmount')
      }
      // 控制组件更新的"阀门"
      shouldComponentUpdate(){
        console.log('Count-shouldComponentUpdate')
        return true; //没有返回值/false,就会关闭就走不下去了
      }
      // 组件将要将要更新
      componentWillUpdate(){
        console.log('Count--componentWillUpdate')
      }
      // 组件已经更新
      componentDidUpdate(){
        console.log('Count--componentDidUpdate')
      }
    }
    
    ReactDOM.render(<Count/>,document.getElementById('test1'))

 

 

注意:

 setState() 是正常更新 即:真正修改了状态的数据才进行的更新

 forceUpdate() 是强制更新,比正常更新少一个,绕过了更新"阀门"

 

父子组件间,父操作子的时候的子的生命周期

class A extends React.Component{
      state = {carName:'奔驰'}

      changeCar = () =>{
        console.log('进入了吗')
        this.setState({carName:'奥拓'})
      }
      render() {
        return (
          <div>
            <div>A</div>
            <button onClick={this.changeCar}>换车</button>
            <B name ={this.state.carName}></B>
         </div>
        )
      }
    }
    class B extends React.Component{
      // 组件能接收新的props的钩子,这个第二次才会调用,(有坑,第一次不算,但是点击换车后才换)
      componentWillReceiveProps(props){
        console.log('B---componentWillReceiveProps',props)
      }
      shouldComponentUpdate()
      {
        console.log('B---shouldComponentUpdate')
        return true;
      }
      componentWillUpdate()
      {
        console.log('B---componentWillUpdate')
      }
      componentDidUpdate()
      {
        console.log('B---componentDidUpdate')
      }
      render(){
        console.log('B---render')
        return (
          <div>我是B组件,接收到的车是:{this.props.name}</div>
        )
      }
    }
    ReactDOM.render(<A/>,document.getElementById('test2'))

 

posted @ 2021-04-08 19:21  zmztyas  阅读(68)  评论(0编辑  收藏  举报