JSFiddle - React, Tailwind, and code Playground

CSS

a { margin: 4px; }

JavaScript

'use strict';

var App = {
	appState: {'someData': 'Foo'},
	controller: function(innerComponent) {
		this.innerCtrl = innerComponent.controller(this.appState);
		this.innerView = innerComponent.view;
	},
  view : function( appController ){
    return m("div", [
    	appController.innerView(appController.innerCtrl)
		]);
  },
  wrap: function(routes) {
  	var map = {};
    Object.keys(routes).map(function(r) {
      map[r] = {
        controller: function() {
          return new App.controller(routes[r]);
        },
        view: App.view,
        appState: App.appState
      };
    }); // end of "map" ..
    return map;
  }
};

var Home = {
	controller: function() {},
  view: function() {
    return [
    	m("h1#main-title", "Home"),
      m('a#link[href="/login"]', {config:m.route}, 'Login')
		];
  }
};

var Login = {
	controller: function() {},
  view: function() {
    return [
    	m("h1#main-title", "Login"),
      m('a#link[href="/"]', {config:m.route}, 'Home')
		];
  }
};
m.route.mode = "pathname";
m.route(document.body, "/", App.wrap({
  "/"          : Home,
  "/login"     : Login
}));