> Uses @vue/reactivity part of vue lib
> Supports vue-devtools
> Minimal overhead
> Allow directly state manipulation (without using mutation)
// Widok instance
import { createWidok } from 'widok';
export const widok = createWidok();
// main app
const app = createApp(App);
app.use(widok);
// store
class Shop {
cart = [];
get getCount() {
return this.cart.length;
};
addToCart(addItem: Item) {
this.cart.push(addItem);
}
@Action()
async buy() {
await fetch('cart/buy', this.cart);
this.cart.length = 0;
}
}
export const shop = widok(Shop);
// usage
import { shop } from './shop';
shop.addToCart({
name: 'Laptop',
price: 200
});
// will emit Patch event
shop.cart.length = 0;
// will also emit Patch event
Creates Widok instance and return function(StoreClass, name?)
name
argument is optional, to overwrite default name extracted from function.name (class name)
Decorator, needed only to overwrite default name (extracted from function.name)
Decorator, if the method performs any async operation should be decorated with (it is only for proper devtools logging).
name
argument is optional, to overwrite default name extracted from function.name
- ActionEvent = some async activities (trigger PatchEvens or SetEvents)
- PatchEvent = grouped values change
- SetEvent = directly value change