```coffeescript
goog.provide 'App'

class App

  ###*
    @param {Element} element
    @param {app.Error} error
    @param {app.Routes} routes
    @param {app.Storage} storage
    @param {app.react.App} reactApp
    @param {este.Router} router
    @constructor
  ###
  constructor: (element, error, routes, storage, reactApp, router) ->

    routes.addToEste router, (route, params) ->
      storage.load route, params
        .then -> routes.setActive route, params
        .thenCatch (reason) -> routes.trySetErrorRoute reason
        .then -> React.renderComponent reactApp.component(), element
        .thenCatch (reason) -> error.handle reason, 'router-load'

    router.start()
```

Use dispatcher for route loading.
user
```coffeescript
goog.provide 'App'

class App

  ###*
    @param {Element} element
    @param {app.Error} error
    @param {app.Routes} routes
    @param {app.Storage} storage
    @param {app.react.App} reactApp
    @param {este.Router} router
    @param {app.Dispatcher} dispatcher
    @constructor
  ###
  constructor: (element, error, routes, storage, reactApp, router, dispatcher) ->

    routes.addToEste router, (route, params) ->
      dispatcher.dispatch 'router-load', route: route, params: params

    dispatcher.register (action, payload) ->
      if action == 'router-load'
        storage.load payload.route, payload.params
          .then -> routes.setActive payload.route, payload.params
          .thenCatch (reason) -> routes.trySetErrorRoute reason
          .then -> React.renderComponent reactApp.component(), element

    router.start()
```
assistant