User Tools

Site Tools


Redux like

Sample for demo. “REDUX TECH”!!! =)

redux-like.js
/*
 * Author, Copyright: Oleg Borodin <onborodin@gmail.com>
 */
 
function createStore(reducer, initialState) {
    let state = initialState
    let listener = () => {}
    return {
        dispatch: (action, payload) => {
            state = reducer(state, action, payload)
            listener(state)
        },
        getState: () => {
            return state
        },
        subscribe: (newListener) => {
            listener = newListener;
        }
    }
}
 
function reducer(state, action, payload) {
    switch (action) {
        case "add":
            return { ...state, counter: state.counter + payload }
        case "sub":
            return { ...state, counter: state.counter - payload }
        default:
            return state
    }
}
 
let data = {
    counter: 1,
    name: 'user'
}
 
function subscriber(state) {
    console.log(state)
}
 
let store = createStore(reducer, data)
store.subscribe(subscriber)
 
 
store.dispatch("add", 2)
store.dispatch("add", 2)
store.dispatch("sub", 1)
console.log(store.getState())
$ node ./redux.js
{ counter: 3, name: 'user' }
{ counter: 5, name: 'user' }
{ counter: 4, name: 'user' }
{ counter: 4, name: 'user' }