Piszemy dalej skrypty, które później połączymy we własną bibliotekę React. VDOM, czyli wirtualny DOM, który może być renderowany. Piszemy pierwsze prototypy naszych funkcji.
Wyrenderujmy sobie coś z obiektu JS:
function createFromVDOM_v1(vDom){
let element = document.createElement(vDom["type"]);
element.textContent = vDom?.["textContent"] || "";
for(const [key, value] of Object.entries(vDom)){
if(key === "type" || key === "textContent")
continue;
element.setAttribute(key, value);
}
return element;
}
let vDom1 = {
type: "li",
textContent: "JavaScript",
class: "text-primary d-flex"
}
console.log(createFromVDOM_v1(vDom1));
//<li class="text-primary d-flex">
Jeżeli dokładnie przerobiliśmy poprzednie lekcje to ten kod nie ma dla nas tajemnic. Ok, teraz potrzebujemy obsługi tworzenia textNodes:
function createFromVDOM_v2(vDom){
if(vDom["type"] === "text"){
let text = vDom?.["textContent"] || "";
let textNode = document.createTextNode(text);
return textNode;
}
let element = document.createElement(vDom["type"]);
element.textContent = vDom?.["textContent"] || "";
for(const [key, value] of Object.entries(vDom)){
if(key === "type" || key === "textContent")
continue;
element.setAttribute(key, value);
}
return element;
}
let vDom2 = {
type: "text",
textContent: "JavaScript"
}
console.log(createFromVDOM_v2(vDom2));
//#text "JavaScript"
Na razie zrobiliśmy bardzo proste renderowanie pojedynczych elementów z VDOM, czyli naszych obiektów, które mają reprezentować realne elementy DOM.
Co jeszcze potrzebujemy? Pomyślmy:
- tworzenie wirtualnego drzewa DOM (vDOM zagnieżdżony i wytwarzany, dzisiaj tylko z VDOMu wytwarzaliśmy DOM, jego element w zasadzie)
- mounting elementów utworzonych z VDOM do drzewa DOM
- diffing, czyli rozeznanie się czy dwa obiekty vDOM się czymś różnią i jeżeli tak update odpowiadającego im elementu DOM
To z grubsza tyle, jeżeli chodzi o pierwsze kroki, jakie będziemy musieli podjąć, aby własnego Reacta napisać.
A piszemy go po to, aby go zrozumieć i w efekcie końcowym umieć go używać. To jedyna słuszna kolejność nauki czegokolwiek porządnie. Ja też 30 minut temu nie wiedziałem czym jest diffing, wiedziałem tylko jak zrobić counter i bloki WordPress w React.
Jakkolwiek boleśnie i brutalnie by to nie brzmiało, to jest jedyny sposób nauczyć się coś porządnie. Wszystko inne jest albo nauką pod deadline, z punktualnością kosztem zrozumienia, albo lenistwem i niedbalstwem, dla którego nie ma wytłumaczenia. Nie w czasach sztucznej inteligencji.
I ogólnie to tylko taka moja dygresja, ale podejście na sprawy programowania mam jak następuje:
- Nie chcesz być programistą? A spróbowałeś pisać hello worldy w Pythonie? Zobacz jakie to proste!
- Chcesz być programistą-hobbystą? Okej, zero presji (a może w końcu cię przekonam, że to twoja pasja i życie, he he he…)
- Chcesz być programistą i mieć życie prywatne, nie wiedzieć jak działa twój kod albo framework, którego używasz? Nie tędy droga, kolego…