Рефрейминг, жизненный цикл компонентов реагентов и фиговое колесо

Я пытаюсь узнать много вещей одновременно, поэтому мой вопрос может быть немного не по адресу.

Я создал проект re-frame-template с lein, и у меня есть основной компонент по умолчанию:

(defn main-panel []
  (let [name (subscribe [:name])]
    (fn [] [:div [:h1 @name]])))

Я хотел добавить прослушиватель событий для нажатия клавиши, но мне не удалось сделать это правильно: если я только установил (используя домину) (listen! ...) в :component-did-mount, при каждой перезагрузке фигового колеса к старому добавляется новый четный прослушиватель ( с). Если я установлю unlisten! в component-will-unmount, я не получу никакого результата при нажатии клавиши.

Что я заметил, так это то, что при каждой перезагрузке фигового колеса :component-will-unmount срабатывает сразу после :component-did-mount!

Что я делаю не так?

Спасибо!


person Dario Oddenino    schedule 27.10.2015    source источник


Ответы (1)


Хорошо, я нашел свою ошибку. Мне пришлось вызывать «методы» реакции с помощью with-meta.

Так, например:

(with-meta myComponent {:component-did-mount #(ev/listen! ...)
                        :component-will-unmount #(ev/unlisten! ...)})
person Dario Oddenino    schedule 28.10.2015
comment
Не используйте with-meta. Очень неуклюжий. github.com/Day8/re-frame/wiki/ - person Mike Thompson; 28.10.2015
comment
Эм спасибо за ссылку! Почему вы считаете его неуклюжим? Эта форма-3 выглядит ужасно многословной! - person Dario Oddenino; 28.10.2015