State is attached directly to DOM elements.
Any other element can mutate that state
through normal JavaScript references.
This allows DOMPP state to remain:
explicit,
composable,
and framework-independent.
// =====================================
// COUNTER ELEMENT
// =====================================
const counter =
document
.createElement("div")
.setAttributes({
class: "card"
})
.setState({
count: 0
})
.setChildren(({ state }) => [
document
.createElement("div")
.setAttributes({
class: "count"
})
.setText(
`${state.count}`
)
]);
// =====================================
// EXTERNAL CONTROLS
// =====================================
const controls =
document
.createElement("div")
.setAttributes({
class: "row"
})
.setChildren(
document
.createElement("button")
.setText("+1")
.setEvents({
click() {
counter.setState(
({ state }) => {
state.count += 1;
}
);
}
}),
document
.createElement("button")
.setText("-1")
.setEvents({
click() {
counter.setState(
({ state }) => {
state.count -= 1;
}
);
}
}),
document
.createElement("button")
.setText("Reset")
.setEvents({
click() {
counter.setState({
count: 0
});
}
})
);
// =====================================
// APP
// =====================================
app
.setChildren(
counter,
controls
);