0Pricing
Vue Academy · 课时

深入理解 h() 函数

h(type, props, children) 签名、VNode 结构,以及渲染动态组件类型

深入理解 h() 函数 是 CoddyKit 上的免费 Vue Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Vue Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Vue Academy 课程共包含 4 节课。

什么是 h 函数

h 函数是 hyperscript 的缩写,它可以直接在 JavaScript 中创建虚拟 DOM 节点(VNode)。它是模板编译结果的基础。渲染函数会返回调用 h 的结果。

函数签名

h 接受三个参数:h(type, props, children)。类型可以是标签名称字符串、组件对象或函数式组件。属性是一个包含属性、组件属性和事件的对象。子节点可以是文本、VNode 数组或插槽对象。

import { h } from "vue";

h(type, props, children);

简单元素

传入标签名称以及包含 class 的属性对象,就可以生成带样式的元素。这里的第三个参数是普通文本内容。

import { h } from "vue";

h("div", { class: "foo" }, "text");
// renders: <div class="foo">text</div>

属性与特性

所有内容都放在同一个属性对象中:HTML 特性、DOM 属性、class、style 和事件监听器。Vue 会在更新时判断每一项应归属何处。

h("input", {
  type: "text",
  value: "hello",
  class: "field",
  placeholder: "Type here"
});

子节点数组

当一个元素包含多个子节点时,请将 VNode 数组作为第三个参数传入。每个子节点本身都是一次对 h 的调用。

h("ul", null, [
  h("li", null, "item")
]);
// renders: <ul><li>item</li></ul>

无属性时传入 null

如果元素没有属性,您可以将 null(或空对象)作为第二个参数传入,这样子节点就会保留在第三个位置。

h("ul", null, [
  h("li", null, "first"),
  h("li", null, "second")
]);

渲染组件

类型参数可以是导入的组件。您传入的属性会成为该组件的属性。

import { h } from "vue";
import MyComponent from "./MyComponent.vue";

h(MyComponent, { title: "Hello" });

以对象形式传入插槽

要向组件传入插槽内容,子节点参数需要改为由函数组成的对象。每个键都是插槽名称,每个值都是一个返回虚拟节点或文本的函数。

h(MyComponent, { title: "Hello" }, {
  default: () => "slot content"
});

具名插槽与作用域插槽

多个插槽就是多个键。作用域插槽会将其属性作为函数参数接收。

h(MyComponent, null, {
  header: () => h("h1", null, "Title"),
  default: (props) => h("p", null, props.text)
});

事件监听器

事件是以 on 开头、后接 PascalCase 事件名称的属性。点击监听器就是 onClick 属性。

h("button", {
  onClick: () => console.log("clicked")
}, "Press me");

从渲染函数返回 h

在 setup 中,您可以返回渲染函数,而不是使用模板。每次重新渲染时都会调用它,以生成虚拟节点树。

import { h, ref } from "vue";

export default {
  setup() {
    const count = ref(0);
    return () => h("button", {
      onClick: () => count.value++
    }, "Count: " + count.value);
  }
};

快速检查

如何使用 h 向组件传入默认插槽内容?

回顾

h 函数通过 h(type, props, children) 构建虚拟节点。类型可以是标签或组件,属性保存特性和 onEvent 监听器,子节点可以是文本、虚拟节点数组,或由函数组成的插槽对象。渲染函数会返回 h 调用,并在每次重新渲染时运行。

常见问题解答

「深入理解 h() 函数」课时是免费的吗?

是的 — 「深入理解 h() 函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Vue Academy 课程的其余内容,请升级到 CoddyKit PRO。 Vue Academy 课程共包含 4 节课。

「深入理解 h() 函数」这节课中我会学到什么?

h(type, props, children) 签名、VNode 结构,以及渲染动态组件类型 你通过在浏览器中直接运行的动手代码来练习 Vue Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Vue Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Vue Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「深入理解 h() 函数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Vue Academy 课中编写并运行代码吗?

能。每节 Vue Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 深入理解 h() 函数
  2. 使用 Vite 在 Vue 3 中编写 JSX
  3. 使用 render 函数实现动态组件
  4. 高阶组件(HOC)模式
← 返回 Vue Academy