mithril.js icon indicating copy to clipboard operation
mithril.js copied to clipboard

Mithril as UI Lib

Open giancarlocp opened this issue 6 years ago • 2 comments
trafficstars

Mithril as UI (virtual-dom) Lib

The functional programing (FP) philosophy is more than I will say, but I want to focus on this:

Do a small functions that does only one thing.

The discussion is:

Does Mithril want to have FP style/structure?

If Mithril wants to fit in there, it would be better split it in some packages.

The Mithril's goal is to be an UI lib, and it does it pretty well.

As an example, Redux-thunk is the smallest package I know.

function createThunkMiddleware(extraArgument) {
  return ({ dispatch, getState }) => next => action => {
    if (typeof action === 'function')
      return action(dispatch, getState, extraArgument);
    return next(action);
  };
}

I have used Mithril for small tasks, so I have used a small part of its API. Maybe there is more to split, if this is approved.

The following are not UI related functions.

  • Mihtirl-request
  • Mihtirl-route (explained below)
  • Mithril-stream

I always use stream. But others maybe not.

I do not use request -> fetch works. Maybe someone prefers axios.

Route is another history, I'm going to quote a section entitled "Waxing eloquent" from chapter 9 of the Joreteg's Redux book (Recommended).

"Many times, we over-engineer by creating generic solutions that include solutions for problems we don't actually have. It's tempting to use large routing libraries just because of their pretty APIs when all we really need to do is match a couple of strings."

I'm not saying Mithril-route is big, it isn't. He argue that Route is an "App state" problem and uses Redux (of course) to deal with it. Meiosis's route is coming.

With this we give the freedom of choice, and we don't have to carry on extra weight, download code will never be used.

giancarlocp avatar Apr 08 '19 01:04 giancarlocp

After a code glance, I have noticed queryString is a common dependency to Mithril, Request and Route. Check buildQueryString and parseQueryString

giancarlocp avatar Apr 08 '19 20:04 giancarlocp

@giancarlocp You might be interested in my in-progress API rework, which aims to decouple quite a few things more properly. It's all pre-proposal stuff, but it's getting close to being ready for an actual concrete proposal. And in particular, one of my plans in that proposal is that routing can be used in the view, but it doesn't have to.

dead-claudia avatar Apr 09 '19 11:04 dead-claudia