React components render order All In One
React components render order All In One
components render order / components lifecycle
DOM tree render order
React diff
React fiber
当父组件进行重新渲染操作时,即使子组件的props或state没有做出任何改变,也会同样进行重新渲染
当子组件进行重新渲染操作时,只有子组件会同样进行重新渲染

parent component change props
import Parent from "./components/parent";
export default function App() {
  const [name, setName] = useState(`xgqfrms`);
  const [show, setShow] = useState(true);
  const toggleShow = () => {
    setShow(!show);
  };
  const updateName = () => {
    setName(`webfullstack`);
  };
  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={toggleShow}>toggleShow</button>
      <p>update props name</p>
      <button onClick={updateName}>updateName</button>
      {show && <Parent name={name}/>}
    </div>
  );
}
parent component change state
import React, { Component } from "react";
import Child from "./child";
import log from "../utils/log";
class Parent extends Component {
  constructor(props) {
    super();
    this.state = {
      show: true,
      randomName: props.name,// "xgqfrms"
    };
    this.toggleShow = this.toggleShow.bind(this);
    log(`parent constructor`, 0);
  }
  getRandomName = () => {
    const randomName = Math.random() > 0.5 ? `abc` : `xyz`;
    this.setState({
      randomName,
    });
  };
  toggleShow = () => {
    const { show } = this.state;
    this.setState({
      show: !show
    });
  };
  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);
  }
  render() {
    log(`parent render`);
    const {
      show,
      randomName,
    } = this.state;
    return (
      <div className="parent">
        <h1>parent-lifecycle-order</h1>
        <button onClick={this.getRandomName}>get random name</button>
        <p>randomName = {randomName}</p>
        <button onClick={this.toggleShow}>toggleShow</button>
        {show && <Child />}
      </div>
    );
  }
}
export default Parent;
child component change state
demos
https://codesandbox.io/s/react-parent-child-lifecycle-order-update-parent-state-render-render-2559w
refs
https://stackoverflow.com/questions/44654982/in-which-order-are-parent-child-components-rendered
https://scotch.io/courses/getting-started-with-react/parent-child-component-communication
xgqfrms 2012-2020
www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
React components render order All In One的更多相关文章
- [React] Recompose: Theme React Components Live with Context
		
SASS Bootstrap allows us to configure theme or branding variables that affect all components (e.g. P ...
 - [React] Styling React Components With Aphrodite
		
Aphrodite is a library styling React components. You get all the benefits of inline styles (encapsul ...
 - [React] Extracting Private React Components
		
we leverage private components to break our render function into more manageable pieces without leak ...
 - Rendering React components to the document body
		
React一个比较好用的功能是其简单的API,一个组件可以简单到一个return了组件结构的render函数.除了一个简单的函数之外,我们还有了一段有用且可复用的代码片段. 问题 不过有时候可能会受到 ...
 - React Components Template
		
React Components Template "use strict"; /** * * @author xgqfrms * @license MIT * @copyrigh ...
 - [React] Create and import React components with Markdown using MDXC
		
In this lesson I demonstrate how to use the library MDXC to create and import React components with ...
 - React Components之间的通信方式了解下
		
先来几个术语: 官方 我的说法 对应代码 React element React元素 let element=<span>A爆了</span> Component 组件 cla ...
 - [Poi] Use Markdown as React Components by Adding a Webpack Loader to Poi
		
Poi ships with many webpack loaders included, but you may run into scenarios where you'll need to cu ...
 - [Recompose] Create Stream Behaviors to Push Props in React Components with mapPropsStream
		
Rather than using Components to push streams into other Components, mapPropsStream allows you to cre ...
 
随机推荐
- 计算机网络安全 —— C# 使用谷歌身份验证器(Google Authenticator)(五)
			
一.Google Authenticator 基本概念 Google Authenticator是谷歌推出的一款动态口令工具,旨在解决大家Google账户遭到恶意攻击的问题,在手机端生成动态口令后, ...
 - jQuery 文本段落展开和折叠效果
			
jQuery 文本段落展开和折叠效果 <!DOCTYPE html> <head> <meta http-equiv="Content-Type" c ...
 - charles配置
			
https://www.cnblogs.com/ceshijiagoushi/p/6812493.html https://www.zzzmode.com/mytools/charles/
 - MySQL高可用HA——keepalived配置
			
0. Keepalived介绍 Keepalived是基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)协议的一款高可用软件.Keepaili ...
 - linux查看log
			
TOMCAT_PATH='/home/jyapp/apache-tomcat-7.0.59/'PID=`ps -ef |grep $TOMCAT_PATH | grep -v grep |awk '{ ...
 - 自定义tree
			
function YpTreeMenu(ypTreeMenu,treeObj) { this.ypTreeMenu=ypTreeMenu; this.treeObj=treeObj; this.tre ...
 - 如何将下载到本地的JAR包手动添加到Maven仓库,妈妈再也不用担心我下载不下来依赖啦
			
我们有时候使用maven下载jar包的时候,可能maven配置都正确,但是部分jar包就是不能下载下来,如果maven设置都不正确的,可以查看我的maven系列文章,这里仅针对maven配置正确,但是 ...
 - 2019牛客暑期多校训练营(第九场)J	Symmetrical Painting (思维)
			
传送门 大体思路就是:枚举所有可能的水平对称线,计算面积更新答案. 所有可能的水平对称线:\(L_i,R_i,{L_i+R_i\over 2}\) 计算面积:将所有可能的水平对称线从小到大排序,然后依 ...
 - Luogu T7468 I liked Matrix!
			
题目链接 题目背景 无 题目描述 在一个n*m 的矩阵A 的所有位置中随机填入0 或1,概率比为x : y.令B[i]=a[i][1]+a[i][2]+......+a[i][m],求min{B[i] ...
 - 【洛谷 p3366】模板-最小生成树(图论)
			
题目:给出一个无向图,求出最小生成树,如果该图不连通,则输出orz. 解法:Kruskal求MST. 1 #include<cstdio> 2 #include<cstdlib> ...