stenciljs 学习三 组件生命周期
stenciljs 组件包含好多生命周期方法, will did load update unload 
实现生命周期的方法比价简单类似 componentWillLoad 。。。。,使用typescript 
比较方便,实现接口就可以了
参考实现
import { Component, Prop,ComponentDidLoad,ComponentDidUnload,ComponentWillLoad,ComponentWillUpdate } from '@stencil/core';
@Component({
  tag: 'my-component',
  styleUrl: 'my-component.css',
  shadow: false
})
export class MyComponent implements ComponentDidLoad ,ComponentDidUnload,ComponentWillLoad,ComponentWillUpdate{
  @Prop() first: string;
  @Prop() last: string;
   componentWillLoad(){
     console.log("Component will to be rendered")
   }
  componentDidLoad() {
    console.log('Component has been rendered');
  }
  componentWillUpdate() {
    console.log('Component will update and re-render');
  }
  componentDidUpdate() {
    console.log('Component did update');
  }
  componentDidUnload() {
    console.log('Component removed from the DOM');
  }
  render() {
    return (
      <div >
        Hello, World! I'm {this.first} {this.last}
      </div>
    );
  }
}
状态渲染
推荐的做法是任何状态的更新在 componentWillLoad() 或者 componentWillUpdate()方法中 
这些方法是在render 之前调用的,可选的是使用componentDidLoad()或componentDidUpdate() 
方法更新状态将导致另一次重新渲染,对于性能来说不是很好。 
如果必须更新状态componentDidUpdate(),则可能会使组件陷入无限循环。如果更新状态componentDidUpdate() 
是不可避免的,那么该方法还应该有一种方法来检测道具或状态是否“脏”(数据实际上是不同的还是与以前相同)。 
通过执行脏检查,componentDidUpdate()可以避免呈现相同的数据,然后componentDidUpdate()再次调用。
生命周期的层次结构
基本原则就是最深的组件首先完成加载,然后componentDidLoad()冒泡调用。 
参考组件
 <cmp-a>
    <cmp-b>
      <cmp-c></cmp-c>
    </cmp-b>
  </cmp-a>
渲染顺序
- cmp-a - componentWillLoad()
 - cmp-b - componentWillLoad()
 - cmp-c - componentWillLoad()
 - cmp-c - componentDidLoad()
 - cmp-b - componentDidLoad()
 - cmp-a - componentDidLoad()
 
异步生命周期方法
生命周期方法还可以返回promises,允许方法异步检索数据或执行任何异步任务
参考:
componentWillLoad() {
  return fetch('/some-data.json')
    .then(response => response.json())
    .then(data => {
      this.content = data;
    });
}
说明
componentDidLoad 只调用一次
参考资料
https://stenciljs.com/docs/component-lifecycle
stenciljs 学习三 组件生命周期的更多相关文章
- AngularJs学习笔记-组件生命周期
		
组件生命周期 (1)组件生命周期钩子 constructor:组件创建时被创建 ngOnChanges: 父组件修改或初始化子组件的输入属性时被调用,如果子组件没有输入属性,则永远不会被调用,它的首次 ...
 - vue  学习一  组件生命周期
		
先上一张vue组件生命周期的流程图 以上就是一个组件完整的生命周期,而在组件处于每个阶段时又会提供一些周期钩子函数以便我们进行一些逻辑操作,而总体来讲 vue的组件共有8个生命周期钩子 beforeC ...
 - Cocos Creator学习三:生命周期回调函数
		
1.目的:学习生命周期回调函数以及回调顺序,更有利于我们逻辑的处理把控. 2.生命周期回调函数: 节点:指cc.Node:组件:指cc.Component. ①onLoad:脚本组件绑定的节点所在场景 ...
 - react学习(三)之生命周期/refs/受控组件 篇
		
挂载/卸载 //在类组件中 class Clock extends React.Component { constructor(props) { super(props); this.state = ...
 - Maven学习(三)生命周期
		
maven有三套生命周期 1.clean 清理项目 2.default 构建项目 3.site 建立项目站点 每套生命周期都包含了一些阶段,这些阶段是有序的,后 ...
 - react学习(6)——关于组件生命周期的问题
		
在项目开发的过程中,遇到了一个问题: 父组件请求后台数据,收到后将数据以props传给子组件,子组件根据收到数据的不同,显示不同的内容,同时,子组件自身可以根据click操作改变根据父组件的数据显示的 ...
 - Vue – 基础学习(1):对生命周期和钩子函的理解
		
一.简介 先贴一下官网对生命周期/钩子函数的说明(先贴为敬):所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周 ...
 - [React] 多组件生命周期转换关系
		
前段时间一直在基于React做开发,最近得空做一些总结,防止以后踩坑. 言归正传,React生命周期是React组件运行的基础,本文主要是归纳多组件平行.嵌套时,生命周期转换关系. 生命周期 Reac ...
 - RxJava 和 RxAndroid 三(生命周期控制和内存优化)
		
rxjava rxandroid 赵彦军 前言:对Rxjava.Rxandroid不了解的同学可以先看看 RxJava 和 RxAndroid RxJava 和 RxAndroid 二(操作符的使用) ...
 
随机推荐
- WPF全屏
			
https://blog.onedevjob.com/2010/10/19/fixing-full-screen-wpf-windows/ 让窗口重绘 Visibility = Visibility. ...
 - 20170503xlVBA房地产数据分类连接
			
Sub NextSeven_CodeFrame4() Application.ScreenUpdating = False Application.DisplayAlerts = False Appl ...
 - mysql5.7执行sql语句出现only_full_group_by错误
			
在/etc/my.cnf的[mysqld]组中添加 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISI ...
 - tomcat8w.exe 运行 提示 指定的服务未安装 unable to open the service 'tomcat8'
			
新下载的Tomcat8 解压版,解压缩完成后,双击tomcat8.exe出现个DOS样子的窗口一闪而过消失了,tomcat也没有启动成功.双击tomcat8w.exe 弹出个错误对话框,说“指定的服务 ...
 - TCP和UDP最完整的区别
			
TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少: 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确性 ...
 - CoderForce 141C-Queue (贪心+构造)
			
题目大意:一个队伍,每个人只记得前面比他高的人的个数x.现在将队伍散开,问能否构造出一支满足条件的队伍,如果能,再给每个人一个满足题意的身高. 题目分析:一个一个排,x越少越先排,如果x比已经排好的人 ...
 - Oracle11g温习-第九章:表空间和数据文件管理
			
2013年4月27日 星期六 10:37 1.tablespace 功能:从逻辑上简化数据库的管理 2.tablespace 概述 一个database 对应多个tablespace ,一个table ...
 - Leetcode 114
			
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
 - SQL ltrim() 和 rtrim() 函数
			
LTRIM删除起始空格后返回字符表达式. 语法LTRIM ( character_expression ) 参数character_expression 是字符或二进制数据表达式.character_ ...
 - Form嵌入到Panel里(C#)
			
直接把这个 Form嵌入到一个 Panel中即可. 示例如下: 要嵌入的 Form: public partial class FormEmbed : Form { public FormEmbed( ...