https://github.com/Matt-Esch/virtual-dom
var h = require("virtual-dom/h");
// h est similaire à React.createElement :
h("div.someClass", { title: "un attribut DOM", onclick: f, ... }, [
h("a", { href: "url" }, "Ceci est un lien"),
h("span", "on peut omettre le deuxième paramètre"),
h("div", [ /* enfant de la sous-div */ ])
]);
https://github.com/AlexGalays/fluxx
var Action = require('fluxx').Action;
var actions = Action.create(
"add",
"remove",
"uneAutreAction"
);
actions.add(objetAAjouter);
actions.remove(objetARetirer);
actions.uneAutreAction(); // cela ne prends pas forcément de paramètre
var Store = require('fluxx').Store;
var store = Store(function (on) {
// L'ensemble des états vivent ici
var list = [];
// Maintenant on réagit à des actions pour faire muter les états
on(actions.add, function (objetAAjouter) {
list.push(objetAAjouter);
});
on(actions.remove, function (objetAAjouter) {
removeFromList(list, objetAAjouter);
});
on(actions.uneAutreAction, function () {
console.log("une autre action");
});
// On retourne l'API exposé dans store
return {
getList: function () {
return list;
}
};
});
- Nous pouvons utiliser
store.getList()
pour récupérer l'état du store. - A chaque fois qu'une action est appelé, la fonction
f
attaché avecon(action, f)
est appelé.
// rend la vue pour un état donné
function render () {
// on récupère tous les états qu'on a besoin pour nos rendus
var list = storeA.getList();
var value = storeB.getValue();
// on retourne une représentation du dom
return h("div", [
h("h1", value),
h("ul",
list.map(function (element) {
return h("li", element);
})
)
]);
}
L'idée est d'appeler cette fonction de rendu à chaque fois qu'un des états à changé. Pour simplifier on peut considérer que n'importe quel changement d'un store invalide l'affichage et donc doit provoquer un re-rendu complet.
Pour se faire on peut utiliser rendering.js.
Rendering abstrait toute la complexité de virtual-dom
(diff, patch, create)
et fait la glue avec fluxx
.
var rendering = require("./rendering");
rendering.auto(storeA, storeB)(render);
Nous devons donner à rendering.auto
l'ensemble des stores sur lesquels la vue dépendent.
Ainsi, cette fonction appelera render
dès qu'un des stores s'est remis à jour (parce qu'il a réagit à une action).