vanjs 世界上最小的响应式 UI 框架
原创
2023-5-29
15:52
编辑于
2023-5-31
11:08
今天在github上看到一个号称世界上最小的响应式UI框架,当加了类似这种世界上最小的,不由让人想点进去看一眼。看到官方的这个对比图,还真算得上世界上最小的响应式UI框架,之一都不用加。
接着激动的查看核心代码。发现只有仅仅的93行代码,这还是包含了空行和注释的。
为了成为世界上最小的,框架代码也有一些非常有意思的操作。
首先是文件开头有一行注释:
// This file consistently uses `let` keyword instead of `const` for reducing the bundle size.
使用let定义变量,而不是const,因为const比let多了两个字母,会导致体积变大😅。
接着是把一些名字比较长的变量或方法重新定义了别名。
// Aliasing some builtin symbols to reduce the bundle size.
let Obj = Object, _undefined, protoOf = Object.getPrototypeOf
// Aliasing `this` to reduce the bundle size.
let s = this, curV = s._val
反正怎么让代码变少就怎么来。
先看一个官方示例,展示如何使用这个响应式UI框架。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>vanjs demo</title>
<script type="module">
import van from './vanjs.js'
const { div, button } = van.tags
const Counter = () => {
const counter = van.state(0)
return div('❤️ ', counter, ' ',
button({ onclick: () => ++counter.val }, '👍'),
button({ onclick: () => --counter.val }, '👎')
)
}
van.add(document.body, Counter())
</script>
</head>
<body>
</body>
</html>
点击按钮,前面的数字会自动更新,做到了响应式的基本特性。
也可以封装组件,方便调用。
<script type="module">
import van from './vanjs.js'
const { table, tbody, thead, td, th, tr } = van.tags
const Table = ({ head, data }) => table(
head ? thead(tr(head.map(h => th(h)))) : [],
tbody(data.map(row => tr(
row.map(col => td(col))
))),
)
van.add(document.body, Table({
head: ["ID", "Name", "Country"],
data: [
[1, "John Doe", "US"],
[2, "Jane Smith", "CA"],
[3, "Bob Johnson", "AU"],
],
}))
</script>
转载请注明出处。本文地址:
https://www.qinshenxue.com/article/vanjs-the-worlds-smallest-responsive-ui-framework.html
关注我的公众号