stenciljs 可以方便的构建交互式组件

支持以下装饰器

  • component
  • state
  • prop
  • watch
  • method
  • element
  • event
  • listen

Component 装饰器

@Component 是一个装饰器,它将 TypeScript 类指定为 Stencil 组件。 每个模板组件在构建时都会转换为 Web component。

import { Component } from '@stencil/core';

@Component({
tag: 'todo-list',
styleUrl: './todo-list.css',
// additional options
})
export class TodoList {
// implementation omitted
}

@Component装饰器还有其它的一些参数

  • assetsDirs: 是从组件到包含组件所需的静态文件(资产)的目录的相对路径数组。
  • scope:是否隔离css的作用域,如果启用了shadow则此项不能设置为 true
  • shadow: 阴影dom用来隔离样式。
  • styleUrls:包含要应用于组件的样式的外部样式表的相对 URL 列表。
  • styles:内联 CSS 而不是使用外部样式表的字符串。

State

@State 用于内部的状态管理,修改 @State装饰的变量会触发组件的重新渲染

import { Component, State, h } from '@stencil/core';

@Component({
tag: 'current-time',
})
export class CurrentTime {
timer: number; // `currentTime` is decorated with `@State()`,
// as we need to trigger a rerender when its
// value changes to show the latest time
@State() currentTime: number = Date.now(); connectedCallback() {
this.timer = window.setInterval(() => {
// the assignment to `this.currentTime`
// will trigger a re-render
this.currentTime = Date.now();
}, 1000);
} disconnectedCallback() {
window.clearInterval(this.timer);
} render() {
const time = new Date(this.currentTime).toLocaleTimeString(); return (
<span>{time}</span>
);
}
}

Prop

@Prop 是用于声明外部数据传入组件的装饰器。

支持的数据类型有 number string boolean Object array,可以

使用this 进行数据访问,在html 设置需要使用dash-case 方式

在jsx 中使用camelCase 方式,默认prop 是不可变的,使用添加

mutable: true 进行修改, 使用 reflech 可以保持 prophtml属性 同步

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

@Component({
tag: 'todo-list-item',
})
export class ToDoListItem {
@Prop({
mutable: true,
reflect: false
}) isComplete: boolean = false;
@Prop({ reflect: true }) timesCompletedInPast: number = 2;
@Prop({ reflect: true }) thingToDo: string = "Read Reflect Section of Stencil Docs";
}

Watch

@Watch()是应用于模具组件方法的修饰器。 修饰器接受单个参数,即用 @Prop()@State() 修饰的类成员的名称。 用 @Watch() 修饰的方法将在其关联的类成员更改时自动运行。

// We import Prop & State to show how `@Watch()` can be used on
// class members decorated with either `@Prop()` or `@State()`
import { Component, Prop, State, Watch } from '@stencil/core'; @Component({
tag: 'loading-indicator'
})
export class LoadingIndicator {
// We decorate a class member with @Prop() so that we
// can apply @Watch()
@Prop() activated: boolean;
// We decorate a class member with @State() so that we
// can apply @Watch()
@State() busy: boolean; // Apply @Watch() for the component's `activated` member.
// Whenever `activated` changes, this method will fire.
@Watch('activated')
watchPropHandler(newValue: boolean, oldValue: boolean) {
console.log('The old value of activated is: ', oldValue);
console.log('The new value of activated is: ', newValue);
} // Apply @Watch() for the component's `busy` member.
// Whenever `busy` changes, this method will fire.
@Watch('busy')
watchStateHandler(newValue: boolean, oldValue: boolean) {
console.log('The old value of busy is: ', oldValue);
console.log('The new value of busy is: ', newValue);
} @Watch('activated')
@Watch('busy')
watchMultiple(newValue: boolean, oldValue: boolean, propName:string) {
console.log(`The new value of ${propName} is: `, newValue);
}
}

mehtod

可以方便的导出函数,方便外部调用。

import { Method } from '@stencil/core';

export class TodoList {

  @Method()
async showPrompt() {
// show a prompt
}
} // used registered
el.showPrompt();

Element

@Element 装饰器是如何访问类实例中的 host 元素。这将返回一个 HTMLElement 实例,因此可以在此处使用标准 DOM 方法/事件。

import { Element } from '@stencil/core';

...
export class TodoList { @Element() el: HTMLElement; getListHeight(): number {
return this.el.getBoundingClientRect().height;
}
}

其它

Event 和 Listen 装饰器将在下一节 事件 中讲解。

StencilJs学习之组件装饰器的更多相关文章

  1. stenciljs 学习四 组件装饰器

    stenciljs 可以方便的构建交互式组件 支持以下装饰器 component prop watch state method element component 说明 component 包含ta ...

  2. stenciljs 学习六 组件开发样式指南

    组件不是动作,最好使用名词而不是动词, 文件结构 每个文件一个组件. 每个目录一个组件.虽然将类似的组件分组到同一目录中可能是有意义的,但我们发现当每个组件都有自己的目录时,更容易记录组件. 实现(. ...

  3. Python学习笔记012——装饰器

    1 装饰器 1.1装饰器定义 在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator). 1.2 装饰器分类 装饰器:函数装饰器,类装饰器,函数的装饰器,类的装饰器 装饰器:函数装饰函 ...

  4. Python小白学习之函数装饰器

    装饰器 2018-10-25 13:49:37 装饰器从字面意思就是用来装饰的,在函数可以理解为:在函数中,我们不想影响原来的函数功能,又想给函数添加新的功能,这时候我们就用到了装饰器. 一般函数操作 ...

  5. Python学习笔记:装饰器

    Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...

  6. python学习之day5,装饰器,生成器,迭代器,json,pickle

    1.装饰器 import os import time def auth(type): def timeer(func): def inner(*args,**kwargs): start = tim ...

  7. python学习笔记之装饰器、递归、算法(第四天)

    参考老师的博客: 金角:http://www.cnblogs.com/alex3714/articles/5161349.html 银角:http://www.cnblogs.com/wupeiqi/ ...

  8. python学习-day20、装饰器【图片缺失可看】印象笔记博客备份

    前言: 装饰器用于装饰某些函数或者方法,或者类.可以在函数执行之前或者执行之后,执行一些自定义的操作. 1.定义:装饰器就是一个函数,为新定义的函数.把原函数嵌套到新函数里面.以后就可以在执行新函数的 ...

  9. Python学习之路——装饰器

    开放封闭原则:不改变调用方式与源代码上增加功能 ''' 1.不能修改被装饰对象(函数)的源代码(封闭) 2.不能更改被修饰对象(函数)的调用方式,且能达到增加功能的效果(开放) ''' 装饰器 # 把 ...

  10. python学习日记(装饰器的补充)

    如何返回被装饰函数的函数名及注释? 问题及实现 先看典型的装饰器: def wrapper(f):#装饰器函数,f是被装饰函数 def inner(*args,**kwargs): '''执行函数之前 ...

随机推荐

  1. ACM-刷题记录-14届NEFU校赛

    P2031凯撒密码 #include<bits/stdc++.h> using namespace std; int main(){ string s; int d; while(cin& ...

  2. NEFUOJ P903字符串去星问题

    Description 有一个字符串(长度小于100),要统计其中有多少个,并输出该字符串去掉后的新字符串. Input 输入数据有多组,每组1个连续的字符串; Output 在1行内输出该串内有多少 ...

  3. Ajax案例:点击按钮向服务端发送请求,将服务端返回的响应体结果在div中显示(get请求)

    客户端代码: <style> #div { width: 200px; height: 100px; border: 2px solid blue; } </style> &l ...

  4. 使用 diffusers 训练你自己的 ControlNet 🧨

    简介 ControlNet 这个神经网络模型使得用户可以通过施加额外条件,细粒度地控制扩散模型的生成过程.这一技术最初由 Adding Conditional Control to Text-to-I ...

  5. 腾讯出品小程序自动化测试框架【Minium】系列(七)测试框架的设计和开发

    前言 整个框架的开发及调通是在3月27日晚上22点完成,如下: 这篇文章真的是拖了太久了,久到我居然把代码部分完成后,彻底给忘了,这记性,真的是年纪大了! 框架的设计开发 1.框架搭建设计要素 日志& ...

  6. 四月十二号java基础知识

    1.面向对象的编程思想是力图使在计算机语言中对事物的描述与现实世界中该事物的本来面目尽可能地一致.2.类(class)和对象(object)是面向对象程序设计方法中最核心的概念3.类是对某一事物的描述 ...

  7. 【Note】矩阵加速

    感谢 \(\text{tidongCrazy}\) 倾情授课. 目录 基本形式 基础习题 P1962 斐波那契数列(例题) P4838 P哥破解密码(矩阵加速) 稍微up P1397 [NOI2013 ...

  8. 04-webpack初体验

    /** * index.js: webpack入口起点文件 * * 1.运行指令: * 开发环境:webpack ./src/index.js -o ./build --mode=developmen ...

  9. Linux grep命令详细教程

    [本文出自天外归云的博客园] 简介 Linux grep命令是一种非常常用的文本搜索工具,它可以在给定的文件中搜索匹配的字符串,并输出匹配的行.grep是全称"global search r ...

  10. 数据分析04-pandas(apply函数、排序、数据合、分组聚合、透视表、交叉表及项目分析)

    数据分析-04 排序 按标签(行)排序 按标签(列)排序 按某列值排序 数据合并 concat merge & join 分组聚合 分组 聚合 透视表与交叉表 透视表 交叉表 项目:分析影响学 ...