xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

react-parent-child-lifecycle-order

react-parent-child-lifecycle-order

react parent child lifecycle order

live demo

https://33qrr.csb.app/

https://codesandbox.io/s/react-parent-child-lifecycle-order-33qrr

https://react-parent-child-lifecycle-order.stackblitz.io

https://stackblitz.com/edit/react-parent-child-lifecycle-order


import React, { Component } from "react";
import log from "../utils/log";

class Child extends Component {
  constructor() {
    super();
    this.state = {};
    log(`child constructor`, 0);
  }
  // new API
  // getDerivedStateFromProps() {
  //   log(`child getDerivedStateFromProps`, 11);
  // }
  // getSnapshotBeforeUpdate() {
  //   log(`child getSnapshotBeforeUpdate`, 22);
  // }
  // old API
  componentWillMount() {
    log(`child WillMount`, 1);
  }
  // UNSAFE_componentWillMount() {
  //   log(`child WillMount`, 1);
  // }
  componentDidMount() {
    log(`child DidMount`, 2);
  }
  componentWillReceiveProps() {
    log(`child WillReceiveProps`, 3);
  }
  // UNSAFE_componentWillReceiveProps() {
  //   log(`child WillReceiveProps`, 3);
  // }
  shouldComponentUpdate() {
    log(`child shouldComponentUpdate`, 4);
    return true;
    // return true or false;
  }
  componentWillUpdate() {
    log(`child WillUpdate`, 5);
  }
  // UNSAFE_componentWillUpdate() {
  //   log(`child WillUpdate`, 5);
  // }
  componentDidUpdate() {
    log(`child DidUpdate`, 6);
  }
  componentWillUnmount() {
    log(`\nchild WillUnmount`, 7);
  }
  componentDidCatch(err) {
    log(`child DidCatch`, err);
  }
  render() {
    log(`child render`);
    return (
      <div className="child">
        <h1>child-lifecycle-order</h1>
      </div>
    );
  }
}

export default Child;



import React, { Component } from "react";

import Child from "./child";
import log from "../utils/log";

class Parent extends Component {
  constructor() {
    super();
    this.state = {
      show: true
    };
    // this.toggoleShow = this.toggoleShow.bind(this);
    log(`parent constructor`, 0);
  }
  // new API
  // getDerivedStateFromProps() {
  //   log(`child getDerivedStateFromProps`, 11);
  // }
  // getSnapshotBeforeUpdate() {
  //   log(`child getSnapshotBeforeUpdate`, 22);
  // }
  // old API
  componentWillMount() {
    log(`parent WillMount`, 1);
  }
  // UNSAFE_componentWillMount() {
  //   log(`parent UNSAFE_WillMount`, 1);
  // }
  componentDidMount() {
    log(`parent DidMount`, 2);
  }
  componentWillReceiveProps() {
    log(`parent WillReceiveProps`, 3);
  }
  // UNSAFE_componentWillReceiveProps() {
  //   log(`parent UNSAFE_WillReceiveProps`, 3);
  // }
  shouldComponentUpdate() {
    log(`parent shouldComponentUpdate`, 4);
    return true;
    // return true or false;
  }
  componentWillUpdate() {
    log(`parent WillUpdate`, 5);
  }
  // UNSAFE_componentWillUpdate() {
  //   log(`parent UNSAFE_WillUpdate`, 5);
  // }
  componentDidUpdate() {
    log(`parent DidUpdate`, 6);
  }
  componentWillUnmount() {
    log(`\n\nparent WillUnmount`, 7);
  }
  componentDidCatch(err) {
    log(`parent DidCatch`, err);
  }
  // toggoleShow() {
  //   const { show } = this.state;
  //   this.setState({
  //     show: !show
  //   });
  // }
  toggoleShow = () => {
    const { show } = this.state;
    this.setState({
      show: !show
    });
  };
  render() {
    log(`parent render`);
    const { show } = this.state;
    return (
      <div className="parent">
        <h1>parent-lifecycle-order</h1>
        {/* <button onClick={this.toggoleShow.bind(this)}>toggoleShow</button> */}
        {/* <button onClick={() => this.toggoleShow}>toggoleShow</button> */}
        <button onClick={this.toggoleShow}>toggoleShow</button>
        {show && <Child />}
      </div>
    );
  }
}

export default Parent;



import React, { useState, useEffect } from "react";

import "./styles.css";

import Parent from "./components/parent";

export default function App() {
  const [show, setShow] = useState(true);
  const toggoleShow = () => {
    setShow(!show);
  };
  useEffect(() => {
    // Update the document title using the browser API
    let flag = true;
    if (flag) {
      document.title = `react hooks ${show}`;
    }
    // cancel promise
    return () => (flag = false);
  }, [show]);
  return (
    <div className="App">
      <h1>react-parent-child-lifecycle-order</h1>
      <button onClick={toggoleShow}>toggoleShow</button>
      {show && <Parent />}
    </div>
  );
}


refs



©xgqfrms 2012-2020

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @   xgqfrms  阅读(257)  评论(15编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-05-16 webpack & webpack-cli
2019-05-16 onsen & UI & vue & mobile UI
2018-05-16 MySQL & CMD
2018-05-16 swagger ui
2018-05-16 React refs all in one
2016-05-16 用户信息 设置 模板
2016-05-16 网站访问者 浏览器 操作系统 等 信息检测! Lightweight JavaScript-based User-Agent string parser: 基于JavaScript的轻量级 用户代理字符串解析器:
点击右上角即可分享
微信分享提示