snabbdom源码剖析(二) h函数

引见

这里是 typescript 的语法,定义了一系列的重载要领。
h 函数重要依据传进来的参数,返回一个 vnode 对象

代码

代码位置 : ./src/h.ts

/**
 * 依据选择器 ,数据 ,建立 vnode
 */
export function h(sel: string): VNode;
export function h(sel: string, data: VNodeData): VNode;
export function h(sel: string, children: VNodeChildren): VNode;
export function h(sel: string, data: VNodeData, children: VNodeChildren): VNode;
export function h(sel: any, b?: any, c?: any): VNode {
    var data: VNodeData = {},
        children: any,
        text: any,
        i: number;

    /**
     * 处置惩罚参数
     */
    if (c !== undefined) {
        // 三个参数的状况  sel , data , children | text
        data = b;
        if (is.array(c)) {
            children = c;
        } else if (is.primitive(c)) {
            text = c;
        } else if (c && c.sel) {
            children = [c];
        }
    } else if (b !== undefined) {
        // 两个参数的状况 : sel , children | text
        // 两个参数的状况 : sel , data
        if (is.array(b)) {
            children = b;
        } else if (is.primitive(b)) {
            text = b;
        } else if (b && b.sel) {
            children = [b];
        } else {
            data = b;
        }
    }

    if (children !== undefined) {
        for (i = 0; i < children.length; ++i) {
            // 假如children是文本或数字 ,则建立文本节点
            if (is.primitive(children[i]))
                children[i] = vnode(
                    undefined,
                    undefined,
                    undefined,
                    children[i],
                    undefined
                );
        }
    }

    // 处置惩罚svg
    if (
        sel[0] === 's' &&
        sel[1] === 'v' &&
        sel[2] === 'g' &&
        (sel.length === 3 || sel[3] === '.' || sel[3] === '#')
    ) {
        // 增添 namespace
        addNS(data, children, sel);
    }
    // 天生 vnoe
    return vnode(sel, data, children, text, undefined);
}
export default h;

其他

h 函数比较简单,重如果供应一个轻易的东西函数,轻易建立 vnode 对象

snabbdom源码剖析系列

snabbdom源码剖析(一) 准备工作

snabbdom源码剖析(二) h函数

snabbdom源码剖析(三) vnode对象

snabbdom源码剖析(四) patch 要领

snabbdom源码剖析(五) 钩子

snabbdom源码剖析(六) 模块

snabbdom源码剖析(七) 事宜处置惩罚

个人博客地址

    原文作者:chen4342024
    原文地址: https://segmentfault.com/a/1190000017518988
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞