Size: a a a

Clojure — русскоговорящее сообщество

2020 October 23

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
При этом постоянно забывают, что события в re-frame обрабатываются не сразу, а в цикле, через requestAnimationFrame и в плохом варианте между ними будут паузы.
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Алксан Аресир
А можно пример чуть побольше? Или про что это вообще?
Про то, что reg-event-fx не должен восприниматься как функция.
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Я попробую найти
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
(rf/reg-event-fx
 ::show-task-overlay
 (fn [{:keys [db]} [_ {:keys [task-id]}]]
   (let [page (-> db router-helpers/get-route router-helpers/get-route-name)]
     {:dispatch-n [[:page/set-value {:page page
                                     :key :show-overlay?
                                     :value true}]
                   [:page/set-value {:page page
                                     :key :task-id
                                     :value task-id}]]})))

(rf/reg-event-fx
 :page/set-value
 (fn [{:keys [db]} [_ {page :page
                       page-key :key
                       page-value :value}]]
   {:db (assoc-in db [:pages page page-key] page-value)}))
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Не пришлось далеко лазать
источник

АА

Алксан Аресир... in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
(-> db do-the-a do-the-b)
В целом то понятно.
А что было за это? Я не помню такого просто. Быстрый способ изменить db?
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Вообще рекомендую прочитать https://github.com/day8/re-frame/issues/639#issuecomment-675788881, да и всю ветку вообще, там автор re-frame описывает своё понимание.
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Не стоит зацикливаться на ordered effects
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Суть в другом
источник

АА

Алксан Аресир... in Clojure — русскоговорящее сообщество
Не. Именно меня заинтересовал пример тот реально.
Потому что у меня пока нет понимания как как раз сделать изменение db кроме как событием так
источник

АА

Алксан Аресир... in Clojure — русскоговорящее сообщество
Хотя в том примере думаю реально многое можно было бы вынести и вызывать одно событие лишь в конце
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
У меня такое есть
(defn o-fx-slurp-graph-base [{:keys [db] :as fx} graph-base]
 (let [new-db (core.state.facade/n-merge-graph-base db graph-base)]
   (-> (merge fx {:db                new-db
                  :dispatch-n        [[:evt.persistence/save-locally-request]
                                      [:evt.sys.user/auto-push-browser-timezone]]
                  :fx/add-doc-data   {:user-id (-> graph-base :user :id)}
                  :fx/document-title (get-in new-db [:UI :page-title])})
       (cofx-nw/o-fx-auto-fetch-product-links)
       (o-fx-auto-start-onboarding)
       (assoc :fx.net/fetch-sn-links 0)
       (o-fx-auto-fetch-gcal-status)
       (cofx-nw/o-fx-auto-schedule-diff)
       (cofx-nw/o-fx-refresh-queries))))

(o-fx-..) это функции которые меняют и db и эффекты,
o-do-thing – это функции только для db
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
n-thing – ещё и нормализует стейт, т.е. пересчёт производного стейта
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
Алксан Аресир
Не. Именно меня заинтересовал пример тот реально.
Потому что у меня пока нет понимания как как раз сделать изменение db кроме как событием так
всё правильно, только событием и надо. Речь о том что бывает что люди начинают дробить события, вместо того чтобы сделать всё в одном
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
я бы и интерцепторы “запретил”
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
мне кажется в них смысл только если в чтении коэффектов
источник

ИФ

Иван Федоров... in Clojure — русскоговорящее сообщество
остальное лучше эффектом сделать, и проще тестировать
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Oleg Roshchupkin
(rf/reg-event-fx
 ::show-task-overlay
 (fn [{:keys [db]} [_ {:keys [task-id]}]]
   (let [page (-> db router-helpers/get-route router-helpers/get-route-name)]
     {:dispatch-n [[:page/set-value {:page page
                                     :key :show-overlay?
                                     :value true}]
                   [:page/set-value {:page page
                                     :key :task-id
                                     :value task-id}]]})))

(rf/reg-event-fx
 :page/set-value
 (fn [{:keys [db]} [_ {page :page
                       page-key :key
                       page-value :value}]]
   {:db (assoc-in db [:pages page page-key] page-value)}))
(rf/reg-event-fx
 ::show-task-overlay
 (fn [{:keys [db]} [_ {:keys [task-id]}]]
   (let [page (-> db router-helpers/get-route router-helpers/get-route-name)]
     {:db (-> db
              (assoc-in [:pages page :show-overlay?] true)
              (assoc-in [:pages page :task-id] task-id))})))
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Суть не поменялась
источник

OR

Oleg Roshchupkin in Clojure — русскоговорящее сообщество
Алксан Аресир
Не. Именно меня заинтересовал пример тот реально.
Потому что у меня пока нет понимания как как раз сделать изменение db кроме как событием так
Изменение db делается событием, это ок. Не ок, когда внутри события вызываются события только для того, чтобы поменять db.
источник