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 二(操作符的使用) ...
随机推荐
- English trip -- VC(情景课)1 F Another view
Another view 另一种观点 拓展应用 Life-skills reading 生活技能阅读 Midtown Adult School 中城成人学校 NAME: Samir Ahmed ...
- 54 Django 模型层(1) 单表查询
单表操作: 一 项目的操作顺序: 1 在model.py文件中创建表结构 class Book(models.Model): id=models.AutoField(primary_key=True) ...
- centos 7安装vmtools时提示The path "" is not a valid path to the xxx kernel headers.
解决办法: yum -y install kernel-headers kernel-devel gcc reboot
- python-day16--内置函数
内置函数操作 #!usr/bin/env python # -*- coding:utf-8 -*- # 1.locals()和globals() # def func(): # x=1 # y=2 ...
- c面试题总结
1. char *pname=new char[10];pname="asdzxc"; cout<<pname: delete pname: 该程序运行时会崩溃,原因时 ...
- pthread_cleanup_push与pthread_cleanup_pop与pthread_cancel与pthread_testcancel
参考: http://blog.csdn.net/zjc156m/article/details/9021343 http://blog.csdn.net/u010027547/article/det ...
- en_o out1
1● o əʊ ɒ ə ɔː ʌ ʊ: 2● oor ʊə ɔː 3● oo u u: 4● or ɜː ə ɔː 5● oar ore ɔː 6● ow əʊ aʊ ...
- sql server中的大数据的批量操作(批量插入,批量删除)
首先我们建立一个测试用员工表 ---创建一个测试的员工表--- create table Employee( EmployeeNo int primary key, --员工编号 EmployeeNa ...
- css 设置背景色
设置背景图 background:url($!{rc.contextPath}/assets/images/bady/date.png)repeat 50px center background:ur ...
- jsp jsp属性范围
jsp提供了4中属性分别是 当前页:一个属性只能在一个页面中取得,跳转淘其他页面无法取得. 一次服务器请求:一个页面中设置的属性,只要经过了服务跳转,而跳转之后的页面可以继续取得 一次回话:一个用户设 ...