Perhaps Mithril does not fit your brain,pitty😊, and you are in search of a very lightweight frontend, I suggest you to give an eye on Sinuous
In the following example, I have tried to implement the Meiosis pattern with Sinuous and Mergerino.
I must say I am really impressed by Sinuous
If you want to test its "lightness" look here : sinuousmeiosis
const o = sinuous.o // observable :-) const html = sinuous.html const map = sinuous.map const merge = mergerino //enhanced Object.assign // Here we observe an array, I have tried to observe the // object directely with no success // So we have to "map" on state to retrieve the object // Look at the App function below let state = o([ { nom: "Albert", age: 58, points: 100 } ]); // Little helper state.merge = function (patch) { //not very friendly but handy //'this' refers to 'state' let current = this()[0] let newstate = merge(current, patch) state([newstate]) } // mergerino accepts functions for updating properties // very handy let actions = { incPoints : () => state.merge({ points : p => p + 1 }), incAge : () => state.merge({ age: (a) => a + 1 }) } // The view is a function of the state. // All the actions are centralized in a unique object function view(s) { return html` <div> Hello <strong>${s.nom}</strong>, you are <strong>${s.age}</strong> years old and have <strong>${s.points}</strong> points </div> <p> <button onclick=${actions.incPoints}>Inc Points</button> <button onclick=${actions.incAge}>Inc Age</button> </p> ` } const App = function () { return html`${map(state, view)}` } document.querySelector('.app') .append(App());
You can test it here sinuous
Top comments (0)