Giter VIP home page Giter VIP logo

Comments (1)

RubyLouvre avatar RubyLouvre commented on July 21, 2024
var flattenStack = [];
function flattenCb(child, key, vnode) {
    let childType = typeNumber(child);
    let flatten = flattenStack[0];
    if (childType < 3) {
        //在React16中undefined, null, boolean不会产生节点
        flatten.lastText = null;
        return;
    } else if (childType < 5) {
        //number string
        if (flatten.lastText) {
            //合并相邻的文本节点
            flatten.lastText.text += child;
            return;
        }
        flatten.lastText = child = createVText("#text", child + "");
    } else {
        flatten.lastText = null;
    }
    let postfix = child.key, 
        children = flatten.children;
    if (postfix && !children[".$" + postfix]) {
        children[".$" + postfix] = child;
    } else {
        if (key === ".") {
            key = "." + flatten.index;
        }
        children[key] = child;
    }
    child.index = flatten.index;
    child.return = vnode;
    if (flatten.prev) {
        flatten.prev.sibling = child;
    }
    flatten.prev = child;
    flatten.index++;
    if(!vnode.child){
        vnode.child = child;
    }
}

export function fiberizeChildren(c, updater) {
    if (c !== void 666) {
        let vnode = updater.vnode;
        flattenStack.unshift({
            index: 0,
            children: {}
            /** 
            prev: null,
            lastText: null,
            */
        });
        delete vnode.child;
        operateChildren(c, "", flattenCb, vnode);
        let top = flattenStack.shift();
        if (top.prev) {
            delete top.prev.sibling;
        }
        return updater.children = top.children;        
    }else{
        return updater.children = {};
    }
}

from anu.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.