不用vdom的lit框架学习3:代码结构初步解析

news/2024/5/7 16:20:23/文章来源:https://blog.csdn.net/baijiafan/article/details/129749707

这是lit框架的系列学习文章,跳转查看其他章节

  1. 不用vdom的lit框架学习1:安装和编译
  2. 不用vdom的lit框架学习2:挠头的web component(兼容性说明,必看)
  3. 不用vdom的lit框架学习3:代码结构初步解析

在补充了web component的一些基础性现状,明确了lit应用的一些适配现状之后,我们进一步来看看代码部分。

初始化安装之后,在目标目录会生成如下结构的初始化页面

│  index.html  //主页面文件
│  package.json
│  vite.config.js  //vite编译配置文件
│  
├─public  //html中直接调用的图片等其他媒体文件
│      vite.svg 
│      
└─src //参与编译的源码文件│  index.css //主css样式文件│  my-element.js //名为my-element的自定义模块│  └─assets  //在模块中引用的图片等其他媒体文件lit.svg 

index.html部分内容

index.html的内容其实就很简单了,主要是两个部分的内容。

首先在头部引用组件的js文件和样式文件

    <link rel="stylesheet" href="./src/index.css" /><script type="module" src="/src/my-element.js"></script>

然后就是像使用普通的a或者div元素一样使用这个自定义组件

<my-element><h1>Vite + Lit</h1>
</my-element>

组件的定义

回过头我们再来看这个my-element.js文件的定义(ts部分请参考官网,官网主体是使用ts来写的,这里就换个思路,主用js):

import { LitElement, css, html } from 'lit'
import litLogo from './assets/lit.svg'/*** An example element.** @slot - This element has a slot* @csspart button - The button*/
export class MyElement extends LitElement {static get properties() {return {/*** Copy for the read the docs hint.*/docsHint: { type: String },/*** The number of times the button has been clicked.*/count: { type: Number },}}constructor() {super()this.docsHint = 'Click on the Vite and Lit logos to learn more'this.count = 0}render() {return html`………………<slot></slot><div class="card"><button @click=${this._onClick} part="button">count is ${this.count}</button></div><p class="read-the-docs">${this.docsHint}</p>`}_onClick() {this.count++}static get styles() {return css`:host {max-width: 1280px;margin: 0 auto;padding: 2rem;text-align: center;}………………`}
}window.customElements.define('my-element', MyElement)

不重要的部分我已省略,大体上面的部分就是定义一个自定义组件需要的最小集内容,除了最开始的引用部分和类定义之外分为这几个部分:

  1. 类中定义properties(static get properties函数),properties是所有页面中需要参与动态渲染过程的变量的统称,用过vue的可类比vue的props,但范围更广,私有的内部的变量也需要在这里定义(类比vue的data),不定义的变量不能做到动态刷新页面的效果
  2. 类的初始化(constructor函数),除了调用super之外,最主要的内容是完成properties的默认值赋值,也就是说properties定义并不完成初始化值赋值,只有此时赋值才有用处。
  3. 类中渲染函数(render函数),返回一个html对象,其内容就是这个自定义组件对应的html代码。
  4. 类中定义功能函数(例子中为_onClick函数),组件对应的动态功能函数,可参考例子使用_作为函数名称开头,标识是内部函数。
  5. 类中定义样式(styles),自定义组建的自有样式,经实际使用发现,样式仅适用于本组件。
  6. 声明,在window.customElements里声明这个组件,名称和对应的类名称,有了这一行,index里面才可以使用<my-element>。

整体风格和react比较类似,和vue相比区别很大。

一些和普通html不太像的地方

有这么几个细节可能以后会逐步展开讲:

  • css定义中的:host指代本对象,在html中,自定义组件也是一级对象,因此可以设置自有的css属性。

  •  part="button",例子中html部分button的属性中有part="button"的定义,这表示该部分是调用方可以使用my-element::part(button)来自定义css样式的部分,当然最好也有对应的头部注释 @csspart button - The button

render函数的写法

今天主要展开讲render函数的写法

render() {return html`………………<slot></slot><div class="card"><button @click=${this._onClick} part="button">count is ${this.count}</button></div><p class="read-the-docs">${this.docsHint}</p>`}

从生成的示例文件可以看到,render函数主要返回了一个html模板,写法是固定使用html开头,后跟(``)包裹的模板字符串,模板中以${和}括起来的部分是动态部分,其他则是静态html。

动态部分主要分为两个部分。

一个是渲染的变量值,比如例子中的count is ${this.count},这个例子主要展示了两种变量,一个是内部变量this.count,该值主要和onClick函数配合,用于内部计数;另外一个是docsHint,主要是外部可传入的附加内容,可以通过修改index.html来试试

    <my-element docsHint="中文Lit教程"><h1>Vite + Lit</h1></my-element>

 

另外就是回调函数的声明,例如例子中的@click=${this._onClick},vue的同学注意了,不需要多个引号。

这个示例通过yarn dev运行之后,点击按钮会动态数值进行增长

 下一步工作

了解到这些信息之后,我们对于lit的使用有了一个初步的概念,从我们自己的角度出发,我们做了以下的工作,这个过程应该是比较通顺的:

1)替换render中的静态部分内容

2)尝试增加更多的properties

3)尝试将新的properties用在render中

以上两步不要搞反了,如果render中用到了没有定义的properties,是不会触发动态渲染的

大家可以初步设想一个页面目标,尝试将示例页面进行上述修改来练手,下一讲将properties的详细定义方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_275849.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客Verilog题目(1)——超前进位加法器

今天起&#xff0c;开始统计一些做的比较难的或者可以扩展知识面的Verilog题目。 第一题来自牛客->verilog快速入门->第12题 4个二进制全加器串联的四位加法器 在此之前需要了解全加器、4个1位二进制全加器串联的四位加法器。再了解为什么要用这种超前进位加法器。’ 全…

APP小程序移动商城系统 助力电商企业拓客引流

近几年电商企业的发展湿透持续旺盛&#xff0c;加上人们线上支付习惯的普及&#xff0c;使网上商城取得了稳健的发展。网上商城系统是在为个人用户和企业用户提供人性化的全方位服务&#xff0c;为用户创造轻松预约的购物环境&#xff0c;满足消费者多样化的购物需求&#xff0…

Microsoft Remote Desktop for Mac(远程桌面连接工具)

Microsoft Remote Desktop for Mac是一款Mac OS平台上的远程桌面控制软件来自微软&#xff0c;你可以通过Microsoft Remote Desktop for mac来控制Windows或者Mac OS设备完成你的工作。microsoft远程桌面为mac译名为微软远程桌面软件&#xff0c;这是一款Mac OS平台上的远程桌面…

OpenAI Translator | 基于ChatGPT API全局翻译润色解析插件

简介 OpenAI Translator&#xff0c;一款基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端应用&#xff0c;使用 ChatGPT API 进行划词翻译和文本润色&#xff0c;借助了 ChatGPT 强大的翻译能力&#xff0c;帮助用户更流畅地阅读外语和编辑外语&#xff0c;允许跨 55 种…

Redis简单介绍-安装基本类型及其操作命令

文章目录1. redis网址2. 安装redis3. redis10大类型及操作命令3.1 key操作命令3.1.1 redis-server重启后数据不会消失3.1.2 keys * 显示所有的key3.1.3 exists 判断key是否存在&#xff0c;存在则计数加13.1.4 type 显示出类型3.1.5 del 删除指定key&#xff0c;返回结果为被删…

人工智能会给普通人带来哪些改变

最近人工智能太火了&#xff0c;很多人都听说了&#xff0c;尤其是大语言模型。可以让我们像和真人聊天一样&#xff0c;与AI对话&#xff0c;根据你所问的问题&#xff0c;AI可能像一个老师&#xff0c;像一个老人&#xff0c;像一个智者回答你的几乎所有问题。这也把有些人吓…

[openwrt]network配置生成和下发

配置脚本调用 network的配置处理入口为:/etc/init.d/boot,函数调用: /bin/config_generate脚本内容如下:

SpringCloud搭建微服务之Gateway+Jwt实现统一鉴权

1. 概述 在微服务项目中&#xff0c;需要对整个微服务系统进行权限校验&#xff0c;通常有两种方案&#xff0c;其一是每个微服务各自鉴权&#xff0c;其二是在网关统一鉴权&#xff0c;第二种方案只需要一次鉴权就行&#xff0c;避免了每个微服务重复鉴权的麻烦&#xff0c;本…

服务端测试知识汇总

目录 服务端测试思想 经济学⻆度 ⾦字塔模型 技术⻆度 HTTP协议 三次握⼿ HTTP完整请求 通信模式 URI信息 请求⽅法 请求状态码 请求/响应头 常⽤请求数据格式 COOKIE请求流程 SESSION请求流程 TOKEN请求流程 API测试维度 单接⼝测试 多个接⼝测试 …

【tensorboard】深度学习的日志信息events.out.tfevents文件可视化工具

在用深度学习模型训练完模型后&#xff0c;会有一些events.out.tfevents格式的日志信息文件&#xff0c;如下图&#xff1a; 在这类文件需要用tensorboard进行打开&#xff0c;并且查看训练过程的信息内容。 1. tensorboard安装 pip install tensorboard -i https://pypi.do…

从零开始学Python第06课:循环结构

我们在写程序的时候&#xff0c;极有可能遇到需要重复执行某条指令或某些指令的场景&#xff0c;例如我们需要每隔1秒钟在屏幕上输出一次“hello, world”并持续输出一个小时。如下所示的代码可以完成一次这样的操作&#xff0c;如果要持续输出一个小时&#xff0c;我们就需要把…

shell:简单易明白的变量和引用

目录什么是变量shell的变量类型declare定义变量的类型根据数据类型分类根据作用域分类变量的定义shell 中的引用什么是变量 可以变化的量。本质上讲&#xff0c;变量就是在程序中保存用户数据的一块内存空间&#xff0c;而变量名就是这块内存空间的地址。 shell的变量类型 s…

“先人一步”!从华为P60看手机品牌如何找到新趋势、新玩法、新增量

对大多数人来说&#xff0c;换新手机是一件充满新鲜感的事&#xff0c;新机到手让人兴奋&#xff0c;可更让老蔡这样的科技发烧友们兴奋的是“比别人更快拿上新机”。朋友圈里晒图&#xff0c;一群人向他询问使用体验&#xff0c;总能让他获得一种不错的“尝鲜感”。这种现象&a…

【javaweb】SpringBoot初次体验

工具&#xff1a;idea 创建maven文件 导入依赖&#xff0c;在pom.xml中&#xff08;在spring boot的官方文档找&#xff09; <!-- spring工程中需要继承的父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…

F1-F7快恢复二极管 SOD-123 1A 50V~1000V

之前东沃电子&#xff08;DOWOSEMI&#xff09;科普过快恢复二极管ES1A-ES1J&#xff1a;SMA封装、正向平均电流1A、最大反向恢复时间35ns、型号齐全&#xff0c;具体型号有&#xff1a;ES1A、ES1B、ES1C、ES1D、ES1E、ES1G、ES1H、ES1J&#xff0c;所对应的工作峰值反向电压分…

composer详解

一.composer简介什么是ComposerComposer 是 PHP 的一个依赖管理工具&#xff0c;它涉及 "packages" 和 "libraries",简单的说就是我们的项目通常会使用其它代码工具库&#xff0c;这时仅仅是在项目中申明依赖哪些代码工具库&#xff0c;它在每个项目的基础…

基于JavaWeb+jsp实现企业员工工资管理系统

一、项目简介 本项目是一套基于ServletJsp实现的学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0…

Android开发工程师想找工作需要掌握哪些

前言 目前互联网行业越来越好&#xff0c;进入这个行业的人员也是越来越多。从开发的角度来看&#xff0c;开发的职位主要分前端&#xff0c;后端&#xff0c;客户端&#xff08;主要分为ios和android开发&#xff09;以及算法工程师等。 Android开发一直是当前互联网行业中最…

playwright--pytest-playwright、pytest-base-url插件编写用例

文章目录前言一、安装插件二、编写用例三、运行用例四、内置fixture五、全局配置base_url前言 官方的 pytest-playwright 插件可以编写端到端测试。它提供上下文隔离&#xff0c;开箱即用地在多个浏览器配置上运行。它继承了pytest框架&#xff0c;以及支持playwright的一些基…

【FPGA-DSP】第一期:DSP基础

目录 1. DSP基础 1.1 DSP基本概念 1.2 FPGA实现DSP的特点 2. DSP硬核的结构与使用 3. FPGA设计DSP技术 3.1. 浮点数与定点数的表示与转换 3.1.1. 双精度浮点数表示 3.1.2. 双精度浮点数与定点数的转换 本章作为FPGA数字信号处理的入门介绍课程&#xff0c;将介绍DSP的…