2

我正在尝试使用试剂来构建我非常基本的项目,但是路由及其参数存在问题。这是来自试剂的样子

已编辑- :require 已添加

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

我正在尝试12c路线获取路线处理看起来像这样

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

1 回答 1

1

这取决于您如何使用路由参数。您的程序和试剂之间的唯一保证是,如果以原子为单位的值发生变化,则试剂成分将相应更改。

TodoMVC 是一个功能完备的示例供您使用reagent,并且secretary.

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

顺便说一句,大多数时候我会使用 re-frame 而不是直接使用试剂。

于 2017-10-17T02:26:03.907 回答