前端又出最强 DX 新框架!这次是 Dlight.js!
liuian 2024-12-30 05:16 64 浏览
大家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。
什么是 Dlight
DX-frist UI Rendering Library ResourcesDlight 是 DX-first 的 UI 渲染库。
具有以下核心特征:
- 开发简单:借助直观且用户友好的 API,无论开发者是构建简单的网站还是复杂的 Web 应用程序,使用 Dlight 进行 Web 开发都变得毫不费力。
- 高性能:DLight 的文件大小仅为 5KB,速度极快且超轻量,无需手动优化即可提供最佳性能。
- ? DX-first:DLight 使用函数调用和点符号的语法使开发更加容易,无需编写过时且难以阅读的 XML 代码。
- 直观简单:DLight 天生具有响应性,设计直观简单,具有极简的 API,无需记忆复杂的函数或库。
目前 Dlight 在 Github 通过 MIT 协议开源,短短几个月有超过 1k 的 star,是一个值得关注的前端开源项目。
如何使用 Dlight
响应性非常简单
Dlight 没有 ref()、 useState()、 createSignal()、$ 标记的计算状态、 memo()。如果想要状态、设置属性、计算属性可以设置另外一个属性,而且永远不会有冗余渲染。
@View
class MusicChooser {
@Prop musics
musicIdx = this.random()
music = this.musics[this.musicIdx]
random() {
return Math.floor(Math.random() * this.musics.length)
}
Body() {
PrettyBtn("Get a new song!")
.onClick(() => {
this.musicIdx = this.random()
})
MusicDisplay(music)
}
}无需三元运算符
DLight 采用 if 语句,开发者可以使用熟悉的条件语句(如 if-else、switch-case),就像编写普通 JavaScript 程序一样构建 UI。
@View
class MusicFavoriteItem {
@Prop musicItem
Body() {
MusicItem(this.musicItem)
div().onClick(this.musicItem.toggleFavorite); {
if (this.musicItem.favorite) {
FavoriteFilled()
} else {
FavoriteBorderOutlined()
.title("Like this song!")
}
}
}
}for 循环
在 DLight.js 中不会有任何新语法,如果要渲染数据数组只需使用 for 循环:
@View
class MusicList {
@Prop musicList
heading = `${this.musicList.length} ${
this.musicList.length > 1 ? "songs" : "song"
} by Lana Del Rey`
Body() {
section(); {
h1(this.heading)
for (const music of this.musicList) {
MusicItem(music)
}
}
}
}上下文的新范式
在所有框架中,没有一种解决方案可以让数据像传递 props 一样轻松地穿过不同的组件层。在 DLight.js 中,引入了一个名为 “Environment” 的概念,可以让开发者上下文数据传递比以往更加轻松。
@View
class Home {
@Env language
Body() {
h1(this.language === "zh" ? "音乐列表" : "Music List")
MusicList()
}
}
@View
class App {
language = "en"
Body() {
ChangeLanguageBtn()
.onClick(() => {
this.language = this.language === "en" ? "zh" : "en"
})
env().language(this.language); {
Home()
}
}
}更多关于 DLight.js 的用法和示例可以参考文末资料,本文不再过多展开。
参考资料
https://github.com/dlight-js/dlight
https://dlight.dev/
https://juejin.cn/post/7341593721100124200
相关推荐
- win8官方正版(windows8官方下载)
-
Windows8是美国微软开发的新一代操作系统,Windows8共有4个发行版本,分别面向不同用户和设备。于2012年10月26日发布。截止至2017年3月26日,Windows8全球市场份额已...
- win7关闭定时关机(win7怎么关闭定时关机设置)
-
win7系统的定时关机设置取消的具体步骤如下:1、首先打开电脑,进入桌面后,点击系统【开始】按钮,选择【所有程序】依次点击【附件】→【系统工具】→【任务计划程序】。2、同时也可以在点击开始按钮后,在搜...
-
- 台式办公电脑配置推荐2025(2020办公台式电脑主流配置)
-
2022年台式电脑建议你可以配16gb或32gb的内存。硬盘呢可以配1tb或者是2tb的硬盘。因为电脑的硬件是不断的升级换代的,我推荐你的配置,起码能确保大概3~5年之内不会落伍。方面于办公和生活,并且你如果玩游戏的话,运行也刚刚的。希望上...
-
2026-01-29 09:21 liuian
- win7网卡驱动在哪里(win7网卡驱动下载安装)
-
首先需要先返回到win7电脑的桌面位置,然后在桌面找到计算机图标,右键点击计算机图标,然后在出现的下滑菜单中选择管理选项。打开计算机管理界面之后,可以看到左侧的菜单栏中有众多的选项,依次点击展开系统工...
- 电脑主机关不掉怎么办(电脑主机关不上机是怎么回事)
-
具体操作流程如下:没有需要保存的文件,可以长按电脑的关机键超过5秒来强制关机,或者鼠标右键点击任务栏空白处,选择【任务管理器】,在占用内存的软件进程上单击鼠标右键,选择结束任务,依次将运行中的任务关闭...
- 电脑公司收银台照片(电脑公司收银台照片怎么弄)
-
白色部分可以用木工板做框架然后用密度板做底子,上面做白色的喷漆,也可以用木工板做好基本的造型后上面加上人造石做,或者是用石材制做但这样的话造价比较高,黄色的突出台面以上的可以用木质面板擦色油漆来实现,...
- vivo电脑模式如何打开(vivo手机如何开启电脑模式)
-
是不是音量键和开机键进水了,这是recovery模式,不要碰开机键,确定了你手机资料就被清空了,去找售后吧vivo手机怎么变成电脑模式基本上是不可能,这种手机进行使用时没有电脑模式只有相关的安卓手机系...
- 番茄小说网页版入口免费阅读
-
番茄小说网页版的使用方法可能因版本而异,但通常来说,你可以按照以下步骤在番茄小说网页版上阅读小说:1.打开你的网页浏览器并输入"番茄小说网页版"进行搜索。2.点击进入番茄小说网页版...
- 电脑键盘上的windows键是哪个键
-
Windows键位于键盘的底部左边,通常带有Windows标志的图标。它的形状像一个方块,其中有四个等分的小方格,其中两个边缘是弯曲的。Windows键通常用于执行与操作系统相关的功能,例如打开开始菜...
- tplink无线网卡如何连接电脑
-
TP-LinkUSB无线网卡驱动是连接电脑和网络的重要组件,安装成功后需要进行设置。首先,将网卡插入电脑USB口,电脑会自动提示安装驱动,按照步骤完成安装。接着,打开网络共享中心,选择“更改适配器设...
- mediaplayer可以播放什么格式
-
播放器windowmediaplayer播放.asf,.wmv..g(使用Microsoft?WindowsMedia?Player10,可以播放和组织计算机及Internet上...
- 9月更新cf烟雾保护头怎么调最新
-
1、首先在桌面点击鼠标“右键”,然后选择“屏幕分辨率”。2、然后再点击“高级设置“。3、接着点击窗口中的“监视器”,将颜色改成为“增强色(16位)”。4、回到桌面,再次点击右键,然后点击“NVIDIA...
- flash游戏播放器经典版(flash游戏播放器安卓最新版)
-
QQ空间的游戏大部分是网页游戏,如不是网页游戏就不能在安卓端或IOS端打开。而网页游戏又分flash游戏和H5游戏而QQ空间大部分游戏都是flash游戏,但是由于flash的漏洞和功耗实在太多,连自家...
- 一周热门
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)
- c++ 字符串查找 (35)
- mysql刷新权限 (34)
