h函数为什么叫h?

简介: h函数为什么叫h?

h函数为什么叫h?


看 vue 源码的时候,提到了snabbdom,而这个库里有个很重要的函数h

我就好奇了,为啥用hh是什么的缩写,表示的到底是什么?

然后就翻到hyperScript这个词,然后找到了解释

Create HyperText with JavaScript, on client or server

htmlHyperText Markup Language的缩写,超文本标记语言,本质是文本,但用的是特殊的标记语言写的,其可以表示 纯文本和媒体资源、表单等其他的非文本,所以是超文本。

那么hyperScript其实是用 js 创建超文本,这里的超文本特指HTML,而 JS 里可以用DOM(document object model)表示HTML,但 js 本身是有DOM API的,为什么作者还要写这个库?

举个例子就明白了:

创建这样的结构:

<div class="parent">
  <span class="son">颜酱真酷</span>
</div>

传统的方式:

function createDiv() {
  const span = document.createElement("span");
  span.className = "son";
  const div = document.createElement("div");
  div.className = "parent";
  div.appendChild(span);
  return div;
}

显然这还是结构简单,属性少的情况,如果很多的话,非常繁琐,而且可读性差。

于是想到了,用简单的语句描述,想要的 DOM 结构,然后用函数统一生成想要的结构

其实一个元素的三斧头:标签名、标签的其他自身信息、子元素

function hyperScript(tagName, attrs, children) {
  // ....
}
const h = hyperScript;
// 这样执行这个方法就可以生成上面的div了
h("div", { className: "parent" }, h("span", { className: "son" }, "颜酱真酷"));

这样可读性强很多,所以这个库的,h函数,是用节点的描述(标签名、属性和事件、子元素)去创建真实节点的,并返回这个真实节点。

snabbdom这个库是处理vnode的,所以它的的h函数,是用节点的描述(标签名、标签的其他自身信息、子元素)创建虚拟节点的,并返回这个虚拟节点。

于是平时看到h 函数的时候,心里的联想是Create Virtual HyperText with JavaScript

大白话,h函数就是用节点的描述(标签名、标签的其他自身信息、子元素)创建虚拟节点。

为什么有了 h 函数还要 vnode 函数?

其实 h 函数,更多的时候,是便于用户传参,用户只需要考虑三个要素:标签名、标签的其他自身信息、子元素。

但是一个vnode有 6 种属性,其中的 key 是从 data 来的,所以vnode函数需要 5 个参数,用户调用的话,显然增加理解门槛,所以用h函数简化了传参,降低调用门槛,而h函数内部调用vnode函数生成vnode

网络异常,图片无法展示
|
网络异常,图片无法展示
|

h函数的参数最多三个,但只有第一个是必传项,第二个参数和第三个都是可传项,所以内部对各种情况作了判断,已生成正确的vnode

// npm i snabbdom 可以快速在编辑器控制台看下,h三个参数,必填的是第一个,data始终是对象,children可以是数组也可以是字符串
const { h } = require("snabbdom");
console.log(h("div.only-sel"));
console.log(h("div.only-data", { name: "demo" }));
console.log(h("div.only-text", "qqq"));
console.log(
  h("div.only-text", { key: "data这里设置key" }, [h("span"), "子text"])
);

网络异常,图片无法展示
|

引用

目录
相关文章
|
10月前
|
算法 编译器 C语言
函数—C(下)
函数—C(下)
65 0
|
10月前
|
存储 C语言 Python
函数的前世今生1系列
函数的前世今生1系列
|
10月前
|
XML 存储 JavaScript
loadXMLString() 函数
`loadXMLString()` 是一个JavaScript函数,用于在不同浏览器环境下解析XML字符串。它使用DOMParser在支持的浏览器中解析,而在IE中则使用ActiveXObject。函数接受XML文本作为参数,返回解析后的XML文档。此函数适用于HTML页面的&lt;script&gt;标签内,方便在页面中重用,尤其在处理XML实例时。
|
C语言
C语言知识点之 函数2
C语言知识点之 函数2
56 0
|
机器学习/深度学习
函数的使用
任务1 统计小组一门课程的总分及平均分。
76 1
|
编译器 C语言
对函数的剖析一
对函数的剖析一
50 0
|
程序员
函数
一、函数 函数是一段封装了特定功能的可重复使用的代码块。它接受输入参数,执行特定的操作,并返回一个结果。函数可以在程序中被多次调用,避免了重复编写相同的代码,提高了代码的复用性和可维护性。 函数通常具有以下几个特点: 1. 输入参数:函数可以接受零个或多个输入参数,用于传递数据给函数。输入参数可以是任意类型的数据,如整数、浮点数、字符串、数组等。函数可以使用输入参数来执行特定的操作。 2. 函数体:函数体是函数的核心部分,包含了函数要执行的操作。函数体是由一系列的语句组成的代码块,可以包含各种控制语句、变量声明、表达式等。函数体定义了函数的具体功能。 3. 返回值:函数可以返回一个结果给调用者
58 0
|
监控 程序员 C语言
|
算法 编译器 C语言
函数部分的详细讲解
函数部分的详细讲解
104 0
|
C语言
可变长参数函数
可变长参数函数
151 0

热门文章

最新文章