Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla a nibh tempus, sollicitudin purus sed, rhoncus sapien. Donec elementum finibus commodo. Nulla venenatis blandit ex. Quisque non ligula et justo pulvinar aliquet sed sit amet ex. Aliquam bibendum dolor lacus, sit amet euismod velit rutrum eget. Vestibulum sit amet pulvinar libero. Aenean fringilla ornare rutrum. Aenean nec scelerisque nibh, vitae fringilla libero. Praesent sollicitudin augue arcu, eget semper mauris congue vitae.
// explanation of basic state implementation
function state(initial) {
let closureVal = initial;
return [() => closureVal, (n) => closureVal = n];
}
const [name, setName] = state("tim")
console.log(name()) // "tim"
setName("tom")
name() // "tom"
// explanation of basic signal implementation
function signal(initial) {
let innerVal = initial;
function value() { return innerVal; }
value.set = (n) => innerVal = n;
value.update = (callback) => innerVal = callback(innerVal);
return value;
}
const age = signal(29)
age() // 29;
age.set(30);
age() // 30
age.update(n => ++n);
age() // 31
// explanation of basic observer implementation
function observer(initial) {
let innerVal = initial;
const subscribers = [];
function obs() { return innerVal; }
obs.subscribe = function(callback) {
subscribers.push(callback);
return () => {
const index = subscribers.indexOf(callback);
if (index > -1) subscribers.splice(index, 1);
};
}
obs.broadcast = function() {subscribers.forEach(callback => callback(innerVal)); }
obs.update = function(v) { innerVal = v; obs.broadcast()}
return obs;
}
const subj = observer("tim");
const unsubscribe = subj.subscribe((v) => console.log(v));
subj.update("tom");
//console.log("tom");
unsubscribe();
subj.update("tim");
// nothing logged
subj(); // "tim"Maecenas vel ornare sem.
Cras sit amet ultrices turpis. Quisque nulla odio, tristique ac lacinia a, placerat nec nunc. Vivamus tempus, urna ut lacinia luctus, diam nibh posuere massa, eu sollicitudin purus neque nec augue. Aenean sed felis eget metus imperdiet lacinia vitae in sem. Duis blandit ullamcorper viverra. Ut posuere risus nunc. Aenean eu tincidunt nibh, id tincidunt tellus. Vivamus pulvinar sollicitudin turpis, nec viverra diam imperdiet tempor. Fusce ullamcorper magna ut tristique sagittis.
Praesent justo lectus, elementum quis lacus at, euismod pretium nulla. Nulla ut nibh nisl. Phasellus mi arcu, finibus vehicula pulvinar ac, pellentesque eu ante. Aliquam tempus erat nulla, eget porttitor sem porttitor eget. Sed sed luctus sem, sit amet convallis orci. Sed felis sapien, malesuada sed molestie luctus, tincidunt ac est. Etiam sollicitudin nec tellus vitae malesuada. Duis tortor ante, mattis at ultricies vitae, lobortis efficitur dui. Curabitur at quam lorem. Aliquam pellentesque ante ut leo accumsan, vitae molestie elit elementum. Nullam sollicitudin ligula a eros blandit dignissim. Nullam tincidunt, nunc ac varius blandit, purus tortor eleifend dolor, ac rutrum justo arcu gravida odio. Sed sodales tempor tortor, quis rhoncus est euismod tempor. Phasellus non diam vel dui elementum aliquam.