0.5.1 • Published 5 months ago
sinai v0.5.1
Sinai
Class based state management for Vue.
Examples
import {
store as createStore,
module,
Getters,
Mutations,
Actions,
} from 'sinai'
// Declare the module state and its initial value
class CounterState {
count = 0
}
// Declare getters
class CounterGetters extends Getters<CounterState>() {
get half() {
return this.state.count / 2
}
}
// Declare mutations
class CounterMutations extends Mutations<CounterState>() {
inc() {
this.state.count += 1
}
dec() {
this.state.count -= 1
}
}
// Declare actions
class CounterActions extends Actions<
CounterState,
CounterGetters,
CounterMutations
>() {
asyncInc(ms: number) {
console.log('count: ' + this.state.count)
console.log('half: ' + this.getters.half)
return new Promise((resolve) => {
setTimeout(() => {
this.mutations.inc()
resolve()
}, ms)
})
}
}
// Create module by composing state/getters/mutations/actions
const counter = module({
state: CounterState,
getters: CounterGetters,
mutations: CounterMutations,
actions: CounterActions,
})
// Create root module
const root = module().child('counter', counter)
// Create store
const store = createStore(root, {
strict: process.env.NODE_ENV !== 'production',
})
// These will be all type checked
console.log(store.state.counter.count)
console.log(store.getters.counter.half)
store.actions.counter.asyncInc(1000)
store.mutations.counter.inc()
For other examples, see tests.
License
MIT
0.4.4
5 months ago
0.4.1
5 months ago
0.5.0
5 months ago
0.4.3
5 months ago
0.5.1
5 months ago
0.4.2
5 months ago
0.4.0
5 months ago
0.3.0
5 months ago
0.2.6
5 years ago
0.2.5
5 years ago
0.2.4
5 years ago
0.2.3
5 years ago
0.2.2
6 years ago
0.2.1
6 years ago
0.2.0
6 years ago
0.1.8
6 years ago
0.1.7
6 years ago
0.1.6
7 years ago
0.1.5
7 years ago
0.1.4
7 years ago
0.1.3
7 years ago
0.1.2
7 years ago
0.1.1
7 years ago
0.1.0
7 years ago