mirror of
https://github.com/jaandrle/deka-dom-el
synced 2025-04-02 20:15:53 +02:00
* :tap: removed on.attributeChanged and static observedAttributes * ⚡ import optimalization * ⚡ scope.signal * 🔤 🐛 * ⚡ 🐛 registerReactivity and types * 🔤 * ⚡ * 🔤 * 🐛 Node in enviroment * ⚡ todos * ⚡ * ⚡ 🔤 * ⚡ lint * ⚡ memo * 🔤 🐛 memo * ⚡ 🔤 todomvc * 🐛 types * 🔤 p08 signal factory * 🔤 ⚡ types * ⚡ 🔤 lint * 🔤 * 🔤 * 🔤 * 🔤 * 📺
39 lines
930 B
JavaScript
39 lines
930 B
JavaScript
/* PSEUDO-CODE!!! */
|
|
import { el, scope } from "deka-dom-el";
|
|
import { S } from "deka-dom-el/signals";
|
|
function Counter() {
|
|
const { host } = scope;
|
|
|
|
let count = S(0);
|
|
const counterText = el("p", "Count: 0");
|
|
S.on(count, c=> counterText.textContent= "Count: " + c);
|
|
|
|
// Manually update DOM element
|
|
const increment = () => {
|
|
count.set(count.get() + 1);
|
|
// NEVER EVER
|
|
// count = S(count.get() + 1);
|
|
// THE HOST IS PROBABLY DIFFERENT THAN
|
|
// YOU EXPECT AND SIGNAL MAY BE
|
|
// UNEXPECTEDLY REMOVED!!!
|
|
S.on(count, (count)=>
|
|
host().querySelector("button").disabled = count >= 10
|
|
);
|
|
};
|
|
setTimeout(()=> {
|
|
// ok, BUT consider extract to separate function
|
|
// see section below for more info
|
|
const ok= S(0);
|
|
S.on(ok, console.log);
|
|
setInterval(()=> ok.set(ok.get() + 1), 100);
|
|
}, 100);
|
|
|
|
return el("div").append(
|
|
counterText,
|
|
el("button", {
|
|
onclick: increment,
|
|
textContent: "Increment"
|
|
})
|
|
);
|
|
}
|