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的相关装饰器。

相关文章
|
数据采集 大数据 Java
熊猫代理代理IP测试,最新代理IP质量测试
希望这篇测试文章,能够帮到那些在观望HTTP代理哪家强的人。
|
JSON 数据格式
ECharts折线图渲染json格式数据(格式为数组)
ECharts折线图渲染json格式数据(格式为数组)
200 0
|
机器学习/深度学习 并行计算 Ubuntu
软件类配置(一)【Windows下使用conda在虚拟环境中安装CUDA、CUDNN及Tensorflow】
软件类配置(一)【Windows下使用conda在虚拟环境中安装CUDA、CUDNN及Tensorflow】
739 0
|
测试技术
【解决方案 二十一】系统专业名词梳理及释义
【解决方案 二十一】系统专业名词梳理及释义
633 0
|
前端开发 Java 应用服务中间件
基于SSM+Mysql在线电影预定下单管理系统
基于SSM+Mysql在线电影预定下单管理系统
219 0
基于SSM+Mysql在线电影预定下单管理系统
|
存储 开发者 Python
Python 决定放弃 BPO,将所有 Bug 迁移到 GitHub 中
Python 决定放弃 BPO,将所有 Bug 迁移到 GitHub 中
208 0
Python 决定放弃 BPO,将所有 Bug 迁移到 GitHub 中
|
2天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。