使用试剂中的默认模板进行路由

时间:2017-10-09 08:01:17

标签: clojurescript reagent secretary

我正在尝试使用试剂来构建我的基本项目,但是我遇到了路由及其参数的问题。这是试剂看起来像

已编辑 - :需要添加

(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)

enter image description here

我正在尝试使用查看功能捕获test参数,但它显示为on C,而不是on C 12。如何将test参数转移到c的视图中?或者我应该将其保存在不同的atoms

已编辑 - 通过将参数保存到atom中解决了问题并且它可以正常工作,但这是传递参数的正确方法吗?

(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 个答案:

答案 0 :(得分:1)

这取决于您如何使用路线参数。程序和试剂之间的唯一保证是,如果更改了ratom的值,试剂组分将相应更改。

TodoMVC是功能完备的示例,供您使用reagentsecretary

https://github.com/tastejs/todomvc/blob/gh-pages/examples/reagent/src/cljs/todomvc/routes.cljs

顺便说一句,大多数时候我会使用重新框架而不是直接使用试剂。