美文网首页
React--State & 生命周期

React--State & 生命周期

作者: fanison | 来源:发表于2020-08-01 18:59 被阅读0次

常用生命周期

constructor()

用途: 初始化 propsstate,用来写bind this

class Parent entends React.Component{
  constructor(props){
    super(props)
    this.state = { name: 'fanison' }
    this.onClick = this.onClick.bind(this)
  }
  // 新语法
  onClick = ()=> {}
}

shouldComponentUpdate()

用途:

  • 返回 true 表示不阻止UI更新
  • 返回 false 表示阻止UI更新
  • 允许我们手动判断是否要进行组件更新,可以根据应用场景灵活地设置返回值,以避免不必要的更新。
  onClick = () =>{
    // 先加一,再减一; 新对象与旧对象地址不同,会render两次
    this.setState(state => ({n: state.n +1}));
    this.setState(state =>({n: state.n - 1}));
  };
  // 使用  shouldComponentUpdate 对比 nextState和 this.state的每个属性,如果全都相等,就不更新;如果有一个不等,就更新
  shouldComponentUpdate(nextProps,nextState){
    if(nextState.n === this.state.n){
      return false
    }else{
      return true
    }
  }
render(){
    console.log('render了一次')
    return(
      <div>
        {this.state.n}
        <button onClick={this.onClick}>+1-1</button>
      </div>
    )
  }

补充: 大多数情况可以使用 React.PureComponent代替 shouldComponentUpdate()

PureComponent 会在 render 之前对比新 state 和旧 state 的每一个 key,以及新 props 和旧 props 的每一个 key。
如果所有 key 的值全都一样,就不会 render;如果有任何一个 key 的值不同,就会 render。

class App extends React.PureComponent{
  constructor(props) {
    super(props);
    this.state = {
      n : 1
    };
  }
  onClick = () =>{
    this.setState(state => ({n: state.n +1}));
    this.setState(state =>({n: state.n - 1}));
  };
  render(){
    console.log('render了一次')
    return(
      <div>
        {this.state.n}
        <button onClick={this.onClick}>+1-1</button>
      </div>
    )
  }
}
export default App;

render()

用途:

  • 展示视图 return (<div>...</div>)
  • 只能有一个根元素
  • 如果有两个根元素,要用<React.Fragment>包起来
  • <React.Fragment /> 可以缩写成 <></>
//render 里面可以写 if...else
render(){
    let message
    if(this.state.n % 2 === 0 ){
      message = <div>偶数</div>
    }else{
      message = <div>奇数</div>
    }
    return(
      <div>
        {message}
        <button onClick={this.onClick}>+1</button>
      </div>
    )
  }

// render 里面可以写?:表达式
render(){
    return(
      <div>
        {this.state.n % 2 === 0 ? <div>偶数</div>:<span>奇数</span>}
        {this.state.n % 2 === 0 ? <div>偶数</div>:null}
        {this.state.n % 2 === 0 && <div>偶数</div>}
        <button onClick={this.onClick}>+1</button>
      </div>
    )
  }

// render里面不能直接写for循环,需要用数组
render(){
    let result = []
    for(let i=0;i<this.state.array.length;i++){
      result.push(this.state.array[i])
    }
    return(
      <div>
        {result}
      </div>
    )
  }

// render里面可以写 array.map(循环)
render(){
    return(
      <div>
        {this.state.array.map(n=><span key={n}>{n}</span>)}
      </div>
    )
  }

componentDidMount() 组件已出现在页面

用途:

  • 在元素插入页面后执行代码,这些代码依赖DOM
  • 可以发起加载数据的 AJAX 请求
  • 首次渲染会执行此钩子
  • 可在此处获取div高度
class App extends React.PureComponent{
  constructor(props) {
    super(props);
    this.state = {
      width:undefined
    };
    this.divRef = React.createRef();
  }

componentDidMount(): void {
  const div = document.getElementById('xxx')
  console.log(div)
  const width = div.getBoundingClientRect().width
  this.setState({width:width})
  // 使用 divRef.current
  const div2 = this.divRef.current
  console.log(div2)
  const {width} = div2.getBoundingClientRect()
  this.setState({width:width})
}

 render(){
   return(
     <>
      <div id="xxx"> GetElementById: {this.state.width} px </div>
      <div ref={this.divRef}>Hello,World {this.state.width} px </div>
     </>
   )
 }

componentDidUpdate() //组件已更新

componentWillUnmount() //组件将死

相关文章

  • React--State & 生命周期

    常用生命周期 constructor() 用途: 初始化 props、state,用来写bind this sho...

  • react--state

    state属性: state对于模块来说,属于自身属性; 初始化:this.state = {name:'xiao...

  • Vue生命周期

    什么是生命周期方法?生命周期钩子=生命周期函数=生命周期事件 Vue生命周期方法分类  创建期间的生命周期方法: ...

  • Activity,Fragment,Service生命周期图

    Activity生命周期 Fragment生命周期 Service生命周期

  • 10,vue生命周期

    生命周期钩子=生命周期函数=生命周期事件 根据生命周期的不同分为三类: 创建阶段的生命周期 运行阶段的生命周期 销...

  • 微信小程序生命周期的记录

    小程序中生命周期分为3类: 应⽤的生命周期 页面的生命周期 组件的生命周期 一、生命周期 1. 应⽤的生命周期[h...

  • Lifecycle 生命周期源码解析

    目录: 什么生命周期 什么是生命周期感知型组件 Activity是如何把生命周期传给生命周期感知组件的 生命周期 ...

  • Vue生命周期

    Vue生命周期详解 一、Vue生命周期 与 作用 (生命周期钩子就是生命周期函数) (1)Vue生命周期:每个Vu...

  • uni-app微信小程序开发 - 生命周期

    uni-app的生命周期分为应用生命周期和页面生命周期还有组件生命周期。 应用生命周期[https://uniap...

  • 【小程序】生命周期

    小程序生命周期分为两类:应用生命周期和页面生命周期。 应用生命周期 应用生命周期包括onLaunch、onShow...

网友评论

      本文标题:React--State & 生命周期

      本文链接:https://www.haomeiwen.com/subject/brayrktx.html