DOM++ preserves runtime ownership
by reusing the same DOM node references.
This example demonstrates how
DOM identity affects:
// =====================================
// FACTORY
// =====================================
function createCounter() {
const identity =
Math.random()
.toString(36)
.slice(2, 8);
// =====================================
// ELEMENT
// =====================================
return document
.createElement("div")
.setAttributes({
class: "card"
})
.setState({
count: 0
})
.setChildren(({
state,
setState
}) => [
// ===============================
// IDENTITY
// ===============================
document
.createElement("div")
.setAttributes({
class: "identity"
})
.setText(
`Identity: ${identity}`
),
// ===============================
// COUNT
// ===============================
document
.createElement("div")
.setAttributes({
class: "counter"
})
.setText(
`${state.count}`
),
// ===============================
// BUTTON
// ===============================
document
.createElement("button")
.setText(
"Increment"
)
.setEvents({
click() {
setState({
count:
state.count + 1
});
}
})
]);
}
// =====================================
// INITIAL NODE
// =====================================
let counter =
createCounter();
// =====================================
// ROOT
// =====================================
const root =
document
.createElement("div")
.setChildren(
counter
);
// =====================================
// REUSE SAME NODE
// =====================================
reuse.setEvents({
click() {
root.setChildren(
counter
);
}
});
// =====================================
// REPLACE NODE
// =====================================
replace.setEvents({
click() {
counter =
createCounter();
root.setChildren(
counter
);
}
});
// =====================================
// APP
// =====================================
app.setChildren(
root
);