太努力容易优秀 2021-01-04 17:46 采纳率: 0%
浏览 6

对于React16.4新生命周期的疑惑

getSnapshotBeforeUpdate 生命周期方法在 render 之后,在更新之前(如:更新 DOM 之前)被调用。给了一个机会去获取 DOM 信息,计算得到并返回一个 snapshot,这个 snapshot 会作为 componentDidUpdate 的第三个参数传入。其中在更新之前调用,我在getSnapshotBeforeUpdate  log了一行为什么拿到的是更新之后的呢(代码如下)?我有点疑惑,麻烦大家帮忙解答一下,谢谢啦

import React, { Component } from 'react';

class childern extends Component {
  constructor(props) {
    super(props);
    this.state = {  };
    this.i = 1
  }
  static getDerivedStateFromProps(props,state){
    console.log('getDerivedStateFromProps==>生命周期')
    return props
  }
  getSnapshotBeforeUpdate(prevProps,prevState){
    console.log('getSnapshotBeforeUpdate==>生命周期',this.ele)
    return this.ele
  }
  componentDidUpdate(snap,a,b){
    console.log('componentDidUpdate==>生命周期',b)
  }
  render() {
    console.log('render==>生命周期')
    return (
      <div 
      onClick={()=>{
        this.setState({a:'我是更新之后的state'})
      }}>
        getDerivedStateFromProps
        <div ref={ele=>{  this.ele = ele }}>{this.state.a}</div>
      </div>
      );
  }
}

export default childern;
  • 写回答

1条回答 默认 最新

  • 鲤鲤鲤carp 2021-01-04 18:01
    关注

    盲猜,是打印的问题,他们用的是用一个地址空间,打印出来的变量会随程序的改变而改变,直接打断点查看状态稳一点

    评论

报告相同问题?

悬赏问题

  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量
  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助