【问题标题】:Routing using default template in reagent使用试剂中的默认模板进行路由
【发布时间】:2017-10-17 10:26:03
【问题描述】:

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

已编辑 - :需要添加

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

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

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

【问题讨论】:

  • 请尝试将您的 atom 更改为 reagent.core/atom
  • @AlbertLai : 谢谢你的回复 :).. 我目前正在使用[reagent.core :as reagent :refer [atom]]

标签: clojurescript reagent secretary


【解决方案1】:

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

TodoMVC 是一个功能完善的示例,供您使用reagentsecretary

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

顺便说一句,我大部分时间会使用re-frame而不是直接使用试剂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 2013-06-08
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2014-01-28
    • 2014-12-24
    相关资源
    最近更新 更多