Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Local State, Global Concerns: Better Snapshot Debugging for ClojureScript/Om (circleci.com)
20 points by brandonbloom on Oct 21, 2014 | hide | past | favorite | 2 comments


This solves (or at least attempts to solve) one of the biggest problems I had about Om. We bent over backwards to get global visibility for tooling, pretty much sacrificing encapsulation entirely, because it was so important for building the right tools. Kudos to React for having such an state-location-agnostic design, to Brandon for hacking out such a cool implementation in basically no time, and to Om for exposing a great API for it.

Speaking of Om's API, I'm very impressed with the surface area that Om exposes. CircleCI continues to build really powerful tooling on top of it - check out this Om Rendering toolbar that Daniel built with just a few lines of code https://dwwoelfel.github.io/instrumenting-om-components.html - more than anything else, tools like this help designers on the frontend be more independent, productive, and happy.

As an aside, the last gripe I have around Om's API is that after exploring Datascript for ClojureCup[1], it feels a lot more natural to have a client-side db backing the components, with each component having a few queries that feed it. Then, when a transaction invalidates a query, queue the component for re-rendering. I've been exploring a DataScript wrapper around React, and even just a weekend project was able to build something that was really exciting to use [2][3]. David Nolen's talked about wanting to see things like DataScript better integrated into Om, and I'm definitely hoping to see the same thing.

[1] http://prcrsr.com/document/789 | https://github.com/clojurecup2014/livemocker

[2] Example query for tracking mouse position in Sul https://github.com/sgrove/sul/blob/master/src/sul/core.cljs#...

[3] Sul Example recording/playback: http://sgrove.github.io/sul/


It's not mentioned in the blog post, but this has been pulled into the main Om repo: https://github.com/swannodette/om/commit/ee9d92bf1191a391df8...

If you're on the new Om alpha, you can use it with:

  (om/root
   app-component
   app-state
   {:target target
    :instrument (fn [f cursor m]
                  (om/build* f cursor (assoc m :descriptor (om/no-local-descriptor om/no-local-state-methods))))})




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: