🌱 Your companion to create derived values from a single source (atom)
derivatives-pool
now returns the record instead of a map with the get!
and release!
functions. If you did not directly call the derivatives-pool
function (and used the Rum mixins) this should not affect you. (e813f1ddfd7)
get!
and release!
functions with their pendants in org.martinklepsch.derivatives
(same names) and pass the derivatives pool record that is now returned by derivatives-pool
as first argument.cljsjs/react-proptypes
for React 16 compatibility (#18){:db [[] (atom {})]}
it was not possible to get ahold of the :db
atom. (64efb6f3)New Feature Implement own derived-value
that can be disposed, which will remove watches on sources (atoms or other watchable things) PR #2
New Feature Extend Rum drv
mixin to accept multiple arguments PR #5 & PR #8.
Previously you called d/drv
multiple times:
(rum/defcs block < rum/reactive (d/drv :product/page) (d/drv :product/images) (d/drv :product/text)
[state]
(let [page (d/react state :product/page)
images (d/react state :product/images)
text (d/react state :product/text)]
...))
Now it is possible to pass multiple keywords to the same function
with the same result as multiple invocations. Also there is a new
function react-all
that can be used to dereference multiple or all
known derivatives at once:
(rum/defcs block < rum/reactive (d/drv :product/page :product/images :product/text)
[state]
(let [{:keys [:product/text]} (d/react-all state)]
[:p text] ,,,))
(d/react-all state) -> {:product/page 'val :product/images 'val :product/text 'val}
(d/react-all state :product/page) -> {:product/page 'val}
Internal The sync-derivatives!
function and the
DerivativesPool
constructor now receive an extra argument
watch-key-prefix
that helps avoiding conflicts when creating
multiple pools from a single source atom with specs that have
overlapping keys. See
#10 for
details.
Bugfix Fix wrong assumption in tests that would cause them to fail when a spec
contains more complex keys: 37cda80
Bugfix Fix issue where sync-derivatives!
would fail if spec keys don't implement IFn b5f9545
build
in terms of sync-derivatives
(implements? IWatchable x)
instead of (fn? x)
childContext
to be stringsget!
and release!
functions