Będziemy pisać własną bibliotekę React. Nie mam tego rozplanowanego, więc zobaczymy, gdzie to nas zaprowadzi. Na razie początki.

Po pierwsze, dekompozycja parametrów, którą już znać powinniśmy:

function createElement_v1({type, content, ...attributes}){

    console.log("Type: ", type);
    console.log("Content: ", content);

    for(const [key, value] of Object.entries(attributes)){
        console.log(key, " : ", value);
    }

}

Przykład użycia:

createElement_v1({type: "h2", content: "HelloWorld", id: "myID", class: "text-secondary"});

// Type:  h2 
// Content:  HelloWorld 
// id  :  myID 
// class  :  text-secondary

Ok, teraz tworzenie textNode:

function createElement_v2({type, content, ...attributes}){

    if(type === "text"){
        let textNode = document.createTextNode(content);
        return textNode;
    }

    for(const [key, value] of Object.entries(attributes)){
        console.log(key, " : ", value);
    }

}

console.log(createElement_v2({type: "text", content: "HelloWorld"}));
//#text "HelloWorld"

Ok, tworzenie elementu:

function createElement_v3({type, content, ...attributes}){

    if(type === "text"){
        let textNode = document.createTextNode(content);
        return textNode;
    }

    let element = document.createElement(type);
    element.textContent = content;
    
    for(const [key, value] of Object.entries(attributes)){
        element.setAttribute(key, value);
    }

    return element;

}

console.log(createElement_v3({type: "text", content: "HelloWorld"}));
//#text "HelloWorld"

console.log(createElement_v3({type: "h2", content: "HelloWorld", id: "myID", class: "text-secondary"}));
//<h2 id="myID" class="text-secondary">HelloWorld</h2>

Staramy się uprościć ten kod:

function createElement_v4({type, content, ...attributes}){

    let textNode = document.createTextNode(content);

    if(type === "text"){
        return textNode;
    }

    let element = document.createElement(type);
    
    element.appendChild(textNode);
    
    for(const [key, value] of Object.entries(attributes)){
        element.setAttribute(key, value);
    }

    return element;

}

Ok, na początek to tyle. Będziemy musieli pomyśleć o jakiejś rekurencji i obsługi dzieci.