分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

stenciljs 学习四 组装饰器

发布时间:2023-09-06 02:16责任编辑:苏小强关键词:js

stenciljs 可以方便的构建交互式组件
支持以下装饰器

  • component
  • prop
  • watch
  • state
  • method
  • element

component 说明

component 包含tag styleUrl 参数
tag 定义组件的名称,注意需要使用-连接, styleUrl 指定组件的样式

参考格式:import { Component } from ‘@stencil/core‘;@Component({ ?tag: ‘todo-list‘, ?styleUrl: ‘todo-list.css‘})export class TodoList { ?...}

prop 说明

定义组件的自定义属性,可以方便的进行组件间数据的传递
支持的数据类型有number string boolean Object array,可以
使用this 进行数据访问,在html 设置需要使用dash-case 方式
在jsx 中使用camelCase 方式,默认prop 是不可变的,使用添加
mutable: true 进行修改,同时我们可以设置默认值

参考:import { Prop } from ‘@stencil/core‘;...export class TodoList { ?@Prop() color: string; ?@Prop() favoriteNumber: number; ?@Prop() isSelected: boolean; ?@Prop() myHttpService: MyHttpService;}this 调用logColor() { ?console.log(this.color)}html 设置属性<todo-list color="blue" favorite-number="24" is-selected="true"></todo-list>jsx 设置属性<todo-list color="blue" favoriteNumber="24" isSelected="true"></todo-list>设置默认值 @Prop({ mutable: true }) name: string = ‘Stencil‘;

watch 说明

我们可以使用watch 进行prop 值验证处理,包含新、旧数据

参考:import { Prop, Watch } from ‘@stencil/core‘;...export class LoadingIndicator { ?@Prop() activated: boolean; ?@Watch(‘activated‘) ?watchHandler(newValue: boolean, oldValue: boolean) { ???console.log(‘The new value of activated is: ‘, newValue); ?}}

state 说明

state 可以进行组件内部状态的管理,state 的更新会造成render 再次调用组件
函数

import { State } from ‘@stencil/core‘;...export class TodoList { ?@State() completedTodos: Todo[]; ?completeTodo(todo: Todo) { ???// This will cause our render function to be called again ???this.completedTodos = [...this.completedTodos, todo]; ?} ?render() { ???// ?}}

method 说明

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

参考:import { Method } from ‘@stencil/core‘;...export class TodoList { ?@Method() ?showPrompt() { ???// show a prompt ?}}调用:const todoListElement = document.querySelector(‘todo-list‘);todoListElement.showPrompt();

Element 说明

可以进行组件访问,返回一个HTMLElement,可以使用DOM方式以及
事件

import { Element } from ‘@stencil/core‘;...export class TodoList { ?@Element() todoListEl: HTMLElement; ?addClass(){ ???this.todoListEl.classList.add(‘active‘); ?}}

嵌入&&嵌套组件

参考:import { Component, Prop } from ‘@stencil/core‘;@Component({ ?tag: ‘my-embedded-component‘})export class MyEmbeddedComponent { ?@Prop() color: string = ‘blue‘; ?render() { ???return ( ?????<div>My favorite color is {this.color}</div> ???); ?}}import { Component } from ‘@stencil/core‘;@Component({ ?tag: ‘my-parent-component‘})export class MyParentComponent { ?render() { ???return ( ?????<div> ???????<my-embedded-component color="red"></my-embedded-component> ?????</div> ???); ?}}

参考资料

https://stenciljs.com/docs/decorators

stenciljs 学习四 组装饰器

原文地址:https://www.cnblogs.com/rongfengliang/p/9710451.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved