Маршрутизация с использованием шаблона по умолчанию в реагенте
Я пытаюсь использовать реагент для создания своего базового проекта, но у меня проблема с маршрутизацией и ее параметрами. Это из реагента выглядит
Отредактировано -: требуется добавить
(ns hammerslider.core
(:require [reagent.core :as reagent :refer [atom]]
[secretary.core :as secretary :include-macros true]
[accountant.core :as accountant]))
;; Views
(defn home-page []
[:div [:h2 "Welcome to hammerslider"]
[:div [:a {:href "/c/12"} "go custom"]]])
(defn c [test]
[:div [:h2 (str "on C " test)]
[:div [:a {:href "/"} "go to the home page"]]])
Я пытаюсь получить 12
от c
маршрут, который является обработкой маршрута выглядит следующим образом
(def page (atom #'home-page))
(defn current-page []
[:div [@page]])
(secretary/defroute "/" []
(reset! page #'home-page))
(secretary/defroute "/c/:test" [test]
(reset! page #'c)
Я пытаюсь поймать test
параметр с функцией просмотра, но он появляется on C
не on C 12
, Как мне перевести test
параметр в представлении c
? или я должен сохранить его на другом atoms
?
Отредактировано - моя проблема решена путем сохранения параметров в атом, и это работает, но это правильный способ передачи параметра?
(def parameter (atom ()))
(defn c []
[:div [:h2 (str "on C " (:test @parameter))]
[:div [:a {:href "/"} "go to the home page"]]])
(secretary/defroute "/c/:test" {:as params}
(do (js/console.log params)
(reset! parameter params)
(reset! page #'c)
))
1 ответ
Это зависит от того, как вы используете параметры вашего маршрута. Единственная гарантия между вашей программой и реагентом состоит в том, что если значение в ratom изменилось, компонент реагента будет изменен соответственно.
TodoMVC - это функциональный пример, который вы можете использовать reagent
а также secretary
,
https://github.com/tastejs/todomvc/blob/gh-pages/examples/reagent/src/cljs/todomvc/routes.cljs
Кстати, большую часть времени я буду использовать рекадр вместо непосредственного использования реагента.