Stemciljs学习之组件生命周期

简介: Stencil 是一个生成 Web Components(更确切地说,是自定义元素)的编译器。Stencil 将最流行的框架的最佳概念结合到一个简单的构建时工具中。 现在让我们一起学习其中的组件生命周期部分。

组件有许多生命周期方法,可用于了解组件何时“将”和“执行”加载、更新和呈现。可以将这些方法添加到组件中,以便在正确的时间挂接到操作中。

在组件类中实现以下方法之一,Stencil 将以正确的顺序自动调用它们:

单组件的生命周期

import { Component, Host, h, Prop, Watch } from '@stencil/core';

@Component({
  tag: 'web-text',
  styleUrl: 'web-text.css',
  shadow: true,
})
export class WebText {
  @Prop() text: string;

  @Watch('text')
  handlerTextWatcher(val: string, oldVal: string) {
    console.log('新值:', val, ',旧值:', oldVal);
    console.log('生命周期:watch');
  }

  connectedCallback() {
    console.log('生命周期:connectedCallback');
  }

  componentWillLoad() {
    console.log('生命周期:componentWillLoad');
  }

  componentWillRender() {
    console.log('生命周期:componentWillRender');
  }

  render() {
    console.log('生命周期:render');
    return <Host>{this.text}</Host>;
  }

  componentDidRender() {
    console.log('生命周期:componentDidRender');
  }

  componentDidLoad() {
    console.log('生命周期:componentDidLoad');
  }

  componentShouldUpdate() {
    console.log('生命周期:componentShouldUpdate');
  }

  componentWillUpdate() {
    console.log('生命周期:componentWillUpdate');
  }

  componentDidUpdate() {
    console.log('生命周期:componentDidUpdate');
  }

  disconnectedCallback() {
    console.log('生命周期:disconnectedCallback');
  }
}

未更改Prop text时console输入的结果

lifecycle-1.png

更改Prop text后console输出的结果

lifecycle-2.png

具体的生命图示如下(源自官方网站)
lifecycle-3.png

更多生命周期相关的细节请参考官方网站

如果要更改PropState的值,建议在componentWill开头的生命周期中去更改,因为带will的生命周期会在组件渲染前执行,在did生命周期内区修改PropState的值,有可能会造成死循环;如果必须在did生命周期内区修改PropState的值,请一定要做好前置判断

嵌套组件的生命周期

<component-a> 
    <component-b> 
        <component-c></component-c> 
    </component-b> 
</component-a>
  1. component-a - componentWillLoad()
  2. component-b - componentWillLoad()
  3. component-c - componentWillLoad()
  4. component-c - componentDidLoad()
  5. component-b - componentDidLoad()
  6. component-a - componentDidLoad()

结束语

上一篇中我们讲解了如何使用stemcil-cli
搭建组件库的方式;那么经过本篇的讲解,我们已经了解了其组件的生命周期;下一篇将讲解stenciljs的相关装饰器。

相关文章
|
2月前
|
应用服务中间件
生命周期
Servlet接口中一共是5个方法,其中有三个是生命周期方法。 Ø void init(ServletConfig):这个方法会在Servlet被创建后,马上被调用。只会被调用一次!我们可以把一些初始化工作放到这个方法中,如果没有什么初始化工作要做,那么这个方法就空着就可以了。 ² Servlet有两个时间点会被创建:一是在第一次被请求时,会被创建;二是Tomcat启动时被创建,默认是第一种,如果希望在tomcat启动时创建,这需要在web.xml中配置。 Ø void destroy():这个方法会在Servlet被销毁之前被调用。如果你有一些需要释放的资源,可以在这个方法中完成,如果
|
5月前
|
前端开发 JavaScript
React 组件的生命周期阶段详解
【8月更文挑战第30天】
57 7
|
5月前
|
前端开发 JavaScript 开发者
React 组件生命周期的详细描述
【8月更文挑战第24天】
55 0
|
5月前
NettyHandler 常用生命周期方法
NettyHandler 常用生命周期方法
37 0
|
7月前
|
JavaScript 前端开发
Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南
Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南
|
8月前
|
前端开发 JavaScript 开发者
在React中,如何利用生命周期方法管理组件的状态和行为?
【5月更文挑战第29天】在React中,如何利用生命周期方法管理组件的状态和行为?
64 3
|
6月前
|
缓存 JavaScript API
vue3 生命周期(生命周期钩子 vs 生命周期选项 vs 缓存实例的生命周期)
vue3 生命周期(生命周期钩子 vs 生命周期选项 vs 缓存实例的生命周期)
154 0
|
前端开发 JavaScript 算法
简述下 React 的生命周期?每个生命周期都做了什么?
react的生命周期,是react组件从挂载到更新再到卸载的这样一个过程,函数组件是没有生命周期这样的一个概念的,它本身就只是一个函数,只有类组件才存在生命周期这样一个概念
440 0
|
8月前
|
缓存 JavaScript
onActivated 生命周期的使用和介绍
onActivated 生命周期的使用和介绍
462 3
|
8月前
|
前端开发
React旧有生命周期和新生命周期的解析
React旧有生命周期和新生命周期的解析
48 0
React旧有生命周期和新生命周期的解析