我正在尝试使用试剂来构建我的基本项目,但是我遇到了路由及其参数的问题。这是试剂看起来像
已编辑 - :需要添加
(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
?
已编辑 - 通过将参数保存到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)
))
答案 0 :(得分:1)
这取决于您如何使用路线参数。程序和试剂之间的唯一保证是,如果更改了ratom的值,试剂组分将相应更改。
TodoMVC是功能完备的示例,供您使用reagent
和secretary
。
https://github.com/tastejs/todomvc/blob/gh-pages/examples/reagent/src/cljs/todomvc/routes.cljs
顺便说一句,大多数时候我会使用重新框架而不是直接使用试剂。