htm 是 preact 作者的新尝试,利用原生 HTML 规范支持了类 JSX 的写法。
使用 h 的理由,官方解释是: It comes from the term “hyperscript”, which is commonly used in many virtual-dom implementations “Hyperscript” itself stands for “script that generates HTML structures” because HTML is the acronym for 它来自单词 hyperscript,这个单词通常用在 virtual-dom 的实现中。 Hyperscript 本身是指 生成HTML 结构的 script 脚本,因为 HTML 是 hyper-text markup language 的缩写(超文本标记语言) createElement 用来生成 HTML DOM 元素,也就是上文中的 generate HTML structures,也就是 Hyperscript,所以用 h 替代了 createElement 。
需要下面这些东西(站在巨人的肩膀上): JSX,史上最强 UI 表达式,支持书写 XML-Hyperscript 互转的 JS 语言 小程序内置 Canvas 渲染器 Cax 最新渲染引擎 HTM,Hyperscript Tagged Markup,可能是 JSX 的替代品或者另一种选择,使用ES标准的模板语法实现的 Hyperscript 运行时/编译时生成,preact 作者(也是google工程师)打造 这里稍微解释下 Hyperscript: 比如 JSX 中的
Templates, JSX, or Hyperscript? 开发者对于用模板还是 JSX 有很多的争执。 另一方面,模板作为一个 DSL 也有它的局限性 - 相比之下 JSX/hyperscript 的程序本质使得它们具有图灵完备的表达能力。 作为一个兼顾设计和开发的人,我喜欢用模板来写大部分的界面,但在某些情况下我也希望能拥有 JSX/hyperscript 的灵活性。
h,用于创建虚拟树的DSL——HyperScript。HyperScript是一个JavaScript的HyperText。 patch,用于patch修改的内容。
一个突出的例子是 Hyperscript,它是 React 团队 在他们的文档中 推荐的。这是一个简单的工具,可以帮助你使用 JavaScript 构建超文本。 我决定将它与一个称作 hyperscript-helpers 的小工具库一起使用试试,我发现这些工具对代码美观的贡献相当不错: function Square({ onClick, value }) { 总结:从代码美学的角度来看,Hyperscript 和 CoffeeScript 的结合是编写漂亮的 React 代码的一种很好的方式。
$page.key 是关键点,首先 render 函数中的 h 很重要,在 Vue 中代表的意思是 hyperscript 用来在当前 Vue 组件系统中,找到对应的组件 或者 HTML 标签来渲染。 render: function (createElement, context) { // ... } }) 这里,介绍一下 hyperscript 方法,同样也可以生成组件,但是并不涉及 $forceUpdate() }) } } } render || hyperscript render 中的 h 函数,主要是用来生成 Vue 中内置的 DOM 节点。 function (createElement,context) { return createElement(App); } h 只是一个传统的缩写,因为 React 里面也有这样的,原意是 Hyperscript 官方解释就是: Hyperscript itself stands for “script that generates HTML structures” h 函数的渲染格式可以参考官方文档。
根据祖师爷的回复,h 的含义如下: It comes from the term "hyperscript", which is commonly used in many virtual-dom implementations "Hyperscript" itself stands for "script that generates HTML structures" because HTML is the acronym for 它来自术语“hyperscript”,该术语常用于许多虚拟 dom 实现。“Hyperscript”本身代表“生成 HTML 结构的脚本”,因为 HTML 是“超文本标记语言”的首字母缩写词。
我们是通过它所包含的信息会来告诉 Vue 页面上需要渲染什么样的节点,再通过diff算法可以追踪dom的变化 拓展:你可能会好奇为啥是叫h()函数,而不是createElement()的简称c() h出自hyperscript HyperText with JavaScript”,而HyperText则是出自我们熟悉的则HTML 是 hyper-text markup language 的缩写(超文本标记语言),所以可以理解为Hyperscript
我们是通过它所包含的信息会来告诉 Vue 页面上需要渲染什么样的节点,再通过diff算法可以追踪dom的变化 拓展:你可能会好奇为啥是叫h()函数,而不是createElement()的简称c() ❝ h出自hyperscript HyperText with JavaScript”,而HyperText则是出自我们熟悉的则HTML 是 hyper-text markup language 的缩写(超文本标记语言),所以可以理解为Hyperscript
这篇文章介绍了阅读源码的重要性,精读系列也已有八期源码系列文章,分别是: 精读《Immer.js》源码 精读《sqorn 源码》 精读《Epitath 源码 - renderProps 新用法》 精读《Htm - Hyperscript Htm - Hyperscript 源码的精华 Htm 将模版语法很自然的融入到了 html 中: html`
根据祖师爷的回复,h 的含义如下: It comes from the term "hyperscript", which is commonly used in many virtual-dom implementations "Hyperscript" itself stands for "script that generates HTML structures" because HTML is the acronym for 它来自术语“hyperscript”,该术语常用于许多虚拟 dom 实现。“Hyperscript”本身代表“生成 HTML 结构的脚本”,因为 HTML 是“超文本标记语言”的首字母缩写词。
比如react-hyperscript。 随着SwiftUI热度提升,更是有人提出用其替代React中的JSX: ?
Templates, JSX, or Hyperscript? 组件缓存?…..擦,好多东西需要学习!哇,好多好东西可以运用!痛并幸福着,生活就是这样。
INITIAL_STATE); let rootNode = create(tree); document.body.appendChild(rootNode); 如你所见,这个虚拟dom的实现使用了HyperScript
开源技术栈非常有趣:Go、MongoDB、HTMX/Hyperscript。
createVNode(tag, props = {}, children = []) { return { tag, props, children} } 在Vue(和许多其他地方)中,此函数称为 h,hyperscript
on htmx脚本是 Hyperscript 的一个例子,这是一种简化的脚本语言。它经常与HTMX一起使用,但并不严格属于HTMX或需要使用它。
与此不同的是,Vue 提供了基于模板的语法和使用 JSX 或 hyperscript 的编程式渲染。 使用模板,可以使开发者更容易地可视化处理设计和样式。
答: 不要将JSX看作混杂进Javascript的HTML,它和hyperscript,也就是创建HTML元素的Javascript是等价的。