项目作者: akiroz

项目描述 :
re-frame interceptors for browser local storage
高级语言: Clojure
项目地址: git://github.com/akiroz/re-frame-storage.git
创建时间: 2016-09-28T15:51:28Z
项目社区:https://github.com/akiroz/re-frame-storage

开源协议:MIT License

下载


re-frame-storage

Clojars Project
GitHub license
Build Status

A very simple re-frame wrapper around storage-atom for persisting app state.

Depends on re-frame >= 0.8.0.

Usage

There are 2 ways to use this:

1. As individual re-frame fx & cofx

  1. (ns my-app
  2. (:require [akiroz.re-frame.storage :refer [reg-co-fx!]]))
  3. ;; both :fx and :cofx keys are optional, they will not be registered if unspecified.
  4. (reg-co-fx! :my-app ;; local storage key
  5. {:fx :store ;; re-frame fx ID
  6. :cofx :store}) ;; re-frame cofx ID
  7. ;; ...
  8. (reg-event-fx
  9. :read-foo-store-bar
  10. [(inject-cofx :store)]
  11. (fn [{:keys [store]} _]
  12. (print (:foo store))
  13. {:store (assoc store :bar "qux")}))

2. As a re-frame interceptor that automatically persists part of your app-db

  1. (ns my-app
  2. (:require [akiroz.re-frame.storage :refer [persist-db]]))
  3. ;; define a custom reg-event-db
  4. ;; local storage key is :my-app
  5. ;; everything inside the db's :persistent key is automatically stored and retreived.
  6. (defn my-reg-event-db
  7. [event-id handler]
  8. (reg-event-fx
  9. event-id
  10. [(persist-db :my-app :persistent)]
  11. (fn [{:keys [db]} event-vec]
  12. {:db (handler db event-vec)})))
  13. ;; ...
  14. (my-reg-event-db
  15. :read-foo-store-bar
  16. (fn [db _]
  17. (print (get-in db [:persistent :foo]))
  18. (assoc-in db [:persistent :bar] "qux")))
  19. ;; Or, if you want to persist multiple DB keys:
  20. (defn my-reg-event-db
  21. [event-id handler]
  22. (reg-event-fx
  23. event-id
  24. [(persist-db-keys :my-app [:persistent-1 :persistent-2])]
  25. (fn [{:keys [db]} event-vec]
  26. {:db (handler db event-vec)})))
  27. ;; May want an init helper to dispatch on app init
  28. (my-reg-event-db :init (fn [db] db))