Signals provide optional
fine-grained reactivity.
Unlike
setState(),
signals rerun only the setters
that directly consume them.
This enables highly granular updates
without rerunning unrelated mutations.
// =====================================
// SIGNAL
// =====================================
const [
count,
setCount
] = document
.createSignal(0);
// =====================================
// APP
// =====================================
document
.getElementById("app")
.setChildren(
document
.createElement("div")
.setAttributes({
class: "card"
})
.setChildren(
// =============================
// COUNT
// =============================
document
.createElement("h2")
.setFineGrained()
.setAttributes({
class: "count"
})
.setText(() => {
return
count();
}),
// =============================
// DESCRIPTION
// =============================
document
.createElement("div")
.setFineGrained()
.setAttributes({
class: "description-box"
})
.setStyles(() => ({
backgroundColor:
count() % 2 === 0
? "lightblue"
: "lightcoral",
color:
"#333",
padding:
"1em",
borderRadius:
"0.5em"
}))
.setText(() => (
`Current count: ${count()}`
)),
// =============================
// BUTTONS
// =============================
document
.createElement("div")
.setAttributes({
class: "row"
})
.setChildren(
document
.createElement("button")
.setText(
"Increment"
)
.setEvents({
click() {
setCount(
count() + 1
);
}
}),
document
.createElement("button")
.setText(
"Decrement"
)
.setEvents({
click() {
setCount(
count() - 1
);
}
})
)
)
);