• React 生命周期


    参考:https://zh-hans.reactjs.org/docs/react-component.html

    常见的生命周期函数如下:

    • Component存在的问题:
      • 父组件重新render,子组件也会跟着重新render,即使数据没有发生改变;
      • 当前组件setState(),会执行render(),即使state没有发生改变。
    • 解决上述问题:
      • 重写shouldComponentUpdate()生命周期勾子。
      • 改用PureComponent声明组件。
    • shouldComponentUpdate()默认返回true,会重新render();  改写为false,则不会重新render()。
    shouldComponentUpdate (nextProps, nextState) {
        // 父组件传进来m1属性,自身state中有m2属性
        if (this.props.m1 === nextProps.m1 && this.state.m2 === nextState.m2) {
            return false;
        } else {
            return true;
        }
    }

      当使用类声明组件(class ... extends ...)时, React.PureComponent自身内部重写了shouldComponentUpdate钩子,不需要再手动添加了。

    • PureComponent的基本原理
      • 重写实现shouldComponentUpdate()
      • 对新/旧state和新/旧props中的数据进行浅比较,如果都没有发生改变,返回false;否则,返回true.
      • 如果内部shouldComponentUpdate返回false, 则不调用render();否则,重新render().

      

    • 如果不初始化 state 或不进行方法绑定,则不需要为 React 组件实现构造函数constructor().
    • 在 constructor() 函数中不要调用 setState() 方法。
    • 避免将 props 的值复制给 state。
    constructor(props) {
      super(props);
      // 不要在这里调用 this.setState()
      this.state = { counter: 0 };
      this.handleClick = this.handleClick.bind(this);
    }
    • componentDidMount()网络请求获取数据。
    • componentDidUpdate(prevProps, prevState, snapshot)在更新后会被立即调用。首次渲染不会执行此方法。
    • 如果组件实现了 getSnapshotBeforeUpdate() 生命周期(不常用),则它的返回值将作为 componentDidUpdate() 的第三个参数 “snapshot” 参数传递。否则此参数将为 undefined。
    componentDidUpdate(prevProps) {
      // 典型用法(不要忘记比较 props):
      if (this.props.userID !== prevProps.userID) {
        this.fetchData(this.props.userID);
      }
    }
    • componentWillUnmount() 会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅。
  • 相关阅读:
    java程序调用CMD命令启动tomcat替换环境变量
    解决mysql中只能通过localhost访问不能通过ip访问的问题
    mysql 主从配置
    maven私服上传jar包
    mysql 服务【安装】【启动】【停止】【卸载】【重置密码】
    spring boot 文件上传大小限制
    Mysql 字符串分隔函数
    上取整和下取整之间的转换关系
    chapter3 数据链路层
    Chapter2 物理层
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/12240771.html
Copyright © 2020-2023  润新知