Mobx + React simple todolist

HTML

<script src="https://unpkg.com/react@15/dist/react.min.js"></script>
<script src="https://unpkg.com/react-dom@15/dist/react-dom.min.js"></script>
<script src="https://unpkg.com/lom_atom@1/dist/lom_atom.umd.js"></script>
<script src="https://unpkg.com/reactive-di@4/dist/reactive-di.umd.js"></script>
<body>
  <div id="mount">
    </div>
</body>

Babel + JSX

// @flow
const {mem, memkey, action, force} = lom_atom
const {createReactWrapper, createCreateElement, Injector, cloneComponent} = window['reactive-di']
const {render} = ReactDOM
const {createElement, Component} = React

/** @jsx lom_h */

// setup
function ErrorableView({error}: {error: Error}) {
    return <div>
        {error instanceof mem.Wait
            ? <div>
                Loading...
            </div>
            : <div>
                <h3>Fatal error !</h3>
                <div>{error.message}</div>
                <pre>
                    {error.stack.toString()}
                </pre>
            </div>
        }
    </div>
}

  const lomCreateElement = createCreateElement(
      createReactWrapper(
          Component,
          ErrorableView
      ),
      createElement
  )
  window['lom_h'] = lomCreateElement


// main

class ProfileStore {
  @mem avatar = '111'
}

function AvatarView(_, store: ProfileStore) {
    return <div>
        Avatar: {store.avatar}
    </div>
}
AvatarView.deps = [ProfileStore]

function KarmaView() { return null }

function ProfileView() {
  return <div>
    <AvatarView/>
    <KarmaView/>
  </div>
}

class MyProfileStore extends ProfileStore {
  @mem karma = '2'
  @mem avatar = '222'
}

function MyKarmaView(_, store: MyProfileStore) {
  return <div>
    Karma: {store.karma}
  </div>
}
MyKarmaView.deps = [MyProfileStore]

const MyProfileView = cloneComponent(ProfileView, [
  [KarmaView, MyKarmaView],
  [ProfileStore, MyProfileStore]
], 'MyProfileView')

function AppView() {
    return <div>
      <h1>ProfileView</h1>
      <ProfileView/>
      <h1>MyProfileView</h1>
      <MyProfileView/>
    </div>
}

ReactDOM.render(<AppView/>, document.getElementById('mount'))