3 ms·
Looks good! FWIW I always felt the observable pattern much more intuitive than the redux/reducer style. Something like https://mobx.js.org/ https://mobx.js.org/
by apsurd 3y ago
Looks good! FWIW I always felt the observable pattern much more intuitive than the redux/reducer style. Something like https://mobx.js.org/ https://mobx.js.org/
Things get hairy in both, but redux pattern feels so ridiculously ceremonial all to effectively manage a huge global state object with a false sense of "purity".
Observables otoh say "fuck it, I'm mutating everything, do what you want with it".
- kennyfrc 3y agoThanks! Cami is technically a combination of both. I like the intuitiveness of observables so that’s used: ``` // define observable this.count = this.observable(0); // getting this.count.value; // setting this.count.update(value => value + 1); ``` But it also has a redux-like pattern where you can dispatch actions and register reducers with far less ceremony: ``` // define store const todoStore = createStore({ todos: [], }); // register reducer / producer todoStore.register('add', (store, payload) => { store.todos.push(payload); }); // subscribe component to store this.todos = this.subscribe(todoStore, 'todos'); // dispatch this.dispatch("add", newTodo); ``` It looks like it’s mutating, but both the reducers and update() uses immer* under the hood, so we still respect immutability under the hood. Cami supports redux devtools so you can use that for time-travel debugging too. —- * https://github.com/immerjs/immer https://github.com/immerjs/immer
- KRAKRISMOTT 3y ago> this.dispatch("add", newTodo); Will the V8 JIT optimize the hash based function table loop into a constant integer array lookup?