Skip to content

Harmony MV is a frontend framework that manages the state of your application using composable, push-based (reactive) components and immutable persistent data structures. Built on immutable js, snabbdom, and xstream.

idettman/harmonize

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Harmony MV

the quality of forming a pleasing and consistent whole

Harmony MV is a frontend framework that manages the state of your application using composable, push-based (reactive) components and immutable persistent data structures.

If you're familiar with React and Redux, the goal of this framework is follow a very similar architecture expect that it removes the indirection that redux enforces.

That is:

In Redux, you dispatch strings that represent actions

const store = createStore(counter)
const rootEl = document.getElementById('root')

const render = () => ReactDOM.render(
  <Counter
    value={store.getState()}
    onIncrement={() => store.dispatch({ type: 'INCREMENT' })}
    onDecrement={() => store.dispatch({ type: 'DECREMENT' })}
  />,
  rootEl
)

render()
store.subscribe(render)

Then in a separate file you switch on that string to get a function.

export default (state = 0, action) => {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1
    case 'DECREMENT':
      return state - 1
    default:
      return state
  }
}

This introduces A LOT of indirection!

In Harmony, you "dispatch" functions that directly update the state.

(And in the case where you want to dispatch an action more than once, just save the function into a variable)

const counter = component({
    view: ({model: count, update, h}) => {
        return h('div', {
            ch: [h('button', {
                on: {click: count => count - 1},
                ch: '-'
            }),
            h('h1', {ch: count}),
            h('button', {
                on: {click: count => count + 1},
                ch: '+'
            })]
        })
    }
})

harmonize({
    model: 0,
    component: counter,
    selector: '#example'
});

That's what this framework aims to do--have the same benefits by using the same unidirectional data-flow but remove all the indirection.

This framework is only in it's conceptual stages. Check back soon.

About

Harmony MV is a frontend framework that manages the state of your application using composable, push-based (reactive) components and immutable persistent data structures. Built on immutable js, snabbdom, and xstream.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published