好的,咱们今天来聊聊 Vue 3 源码里一个不起眼,但又相当重要的函数:normalizeVNode。 别看它名字平平无奇,它可是保证 Vue 内部 VNode 统一性的关键先生,就像一个优秀的行政总厨,能把各种来路的食材处理成标准化的菜品,确保出品质量稳定。 开场白:VNode 的百花齐放 在 Vue 的世界里,VNode(Virtual Node,虚拟节点)是描述 DOM 结构的核心数据结构。但问题来了,这些 VNode 的来源可是五花八门: 模板编译: 你的 .vue 文件里的 <template>,经过 Vue 的编译器编译后,会生成一棵 VNode 树。 JSX/TSX: 如果你喜欢用 JSX 或者 TSX 写 Vue 组件,那么你写的那些类似 HTML 的代码也会被转换成 VNode。 Render 函数: 还有一种更灵活的方式,直接在组件的 render 函数里手写 VNode。 插槽(Slots): 插槽的内容,本质上也是 VNode,可以由父组件传递过来,也可以是子组件自己的默认内容。 这些不同来源的 VNode,可能在结构上略有差异,甚至可能包含一些无效 …
继续阅读“解释 Vue 3 源码中 `normalizeVNode` 函数的深层含义,它如何确保不同来源的 VNode 具有统一的内部表示。”