reagent icon indicating copy to clipboard operation
reagent copied to clipboard

Add `react` function for working with exteral atom-like types

Open pepijndevos opened this issue 4 years ago • 1 comments

Reagent comes with several atom-like types that implement IDeref and IWatchable, but to my knowledge does not support implementing your own data sources. In Rum there is a react function that basically sets up the watcher and calls deref. Could Reagent support the same? From my limited understanding it'd basically be

(defn react [a]
  (notify-deref-watcher! a)
  @a)

This would enable implementing elegant reactive behavior over JS libraries, websockets, localstorage, you name it. Anything that supports taking the value and notifying changes.

Note that notify-deref-watcher! itself is a private function, so it's currently not kosher to implement this externally.

pepijndevos avatar Aug 28 '21 09:08 pepijndevos

Started investigating this in #547

The implementation is indeed quite simple, as Ratom doesn't itself need to do much, just to register itself to reactive context, and the reactive context (reaction) just uses regular IWatchable protocol to listen for changes, and normal atoms implement that.

Deraen avatar Sep 03 '21 13:09 Deraen