react生命周期.md

2019-03-12  本文已影响0人  时修七年

生命周期

react生命周期.jpg

Mounting 挂载阶段 -->Updating 运行时阶段->Unmountinf ->卸载阶段--->Error Handleing 错误处理

1、shouldComponentUpdate (是否允许组件重新渲染)
2、componentWillUpdate (重新渲染之前)
3、render 第二次及以后重新渲染
4、componentDidUpdate (重新渲染之后)


解析流程code

import React from 'react'
import './App.css'


class App extends React.Component {
  // 这是第一个执行的
  static defaultProps = {}
  constructor(){
    super()
    console.log('第一次渲染=constructor...')
    this.state = { n: 1}
  }

  // async componentWillMount() {
  //   let result = await queryData()
  //   this.setState({
  //     n: result
  //   })
  // }
  // 可以拿到数据
  componentWillMount() {
    console.log('WILL-MOUNT')
    console.log(this.state.n)
    console.log(this.refs.dow)
  }

  render(){
    console.log('Render')
    return <div ref='dow'>{this.state.n}</div>
  }
  /* 可以操作dom
真实项目中在这个阶段控制状态信息的更改获取数据,如果在willMount直接修改数据,会把状态信息改变后,然后
render和di的,但是如果set-State是放在一个异步操作中完成,也是先执行redner和didMounted

真实项目中的数据绑定,一般是第一次组件渲染,我们都是绑定的默认属性,第二次才是服务器获取的数据 */
  componentDidMount(){
    console.log('Did-Mount')
    console.log(this.refs.dow)
    setInterval(() => {
      this.setState({n: this.state.n + 1})
    }, 2000);
  }

  // state状态发生改变后调用,一般为了性能优化
  shouldComponentUpdate(nextProps,nextState){
    // nextProps,nextState分别代表最新修改的属性和状态
    // 在shouldUpdate的钩子函数中获取到的值不是修改过的,而是上一次的
    console.log('shouldComponentUpdate,函数返回true就是允许')
    if(nextState.n>4){
      return false
    }else{
      return true
    }

  }

  componentWillUpdate(nextProps,nextState){
    // 这里面的获取的状态也是更新之前的
    console.log('组件更新之前...')
  }

  componentDidUpdate(){
    // 这里获取的状态是更新之后的
    console.log('组件更新之后')
  }
}
export default App

上一篇下一篇

猜你喜欢

热点阅读