为什么我的Reitit路由中需要使用磅符号?

问题描述 投票:0回答:1

我一直在使用ClojureScript制作一个个人网站,并决定使用Reitit作为我的路由库,而不是我常用的Secretary。我读到了关于Reitit的一些好的东西,并且它已经可以正常工作了,但是只有当我导航到一个带有 "#"的路径时,它才会有反应。

例如:我想去 我想去 "website.composts", 但它只在我去 "website.com#posts "的时候才有反应

我的 routes.cljs 几乎是复制了他们的重构例子。

(defn href
  ([k]
   (href k nil nil))
  ([k params]
   (href k params nil))
  ([k params query]
   (rfe/href k params query)))


(def routes
  ["/"
   [""
    {:name :home
     :view v/main-panel
     :controllers [{:start (fn [& params] (js/console.log "Home"))
                    :stop (fn [& params] (js/console.log "Leaving Home"))}]}]
   ["posts"
    {:name :posts
     :view v/post-panel
     :controllers [{:start (fn [& params] (js/console.log "Posts"))
                    :stop (fn [& params] (js/console.log "Leaving Posts"))}]}]])

(defn on-navigate [new-match]
  (when new-match
    (re-frame/dispatch [::e/navigated new-match])))

(def router
  (rf/router
   routes
   {:data {:coercion rss/coercion}}))

(defn init-routes! []
  (rfe/start!
   router
   on-navigate
   {:use-fragment true}))

我的events.cljs也是按照他们的例子来的。

(re-frame/reg-event-fx
 ::navigate
 (fn [db [_ & route]]
   {::navigate! route}))

(re-frame/reg-event-fx
 ::navigate!
 (fn [route]
   (apply rfe/push-state route)))

(re-frame/reg-event-db
 ::navigated
 (fn [db [_ new-match]]
   (let [old-match (:page db)
         controllers (rfc/apply-controllers (:controllers old-match) new-match)]
     (assoc db :page (assoc new-match :controllers controllers)))))

在我的views.cljs中,我有一些逻辑,根据字典条目:page来改变显示的页面。

(defn page []
  (let [current @(rf/subscribe [::subs/page])]
    [:div {:style {:justify-content :center}}
     [navbar]
     (case (:name (:data current))
       :home [main-panel]
       :posts [posts-panel]
       [:div])]))

路由有点工作,所以我现在能够推进我的网站,但我希望最终的产品在导航时URL中不要有'#'。

我缺少了什么?网站开发对我来说还是很陌生的,所以非常欢迎大家的建议。

url-routing clojurescript reitit
1个回答
1
投票

尝试通过 {:use-fragment false} 变成 rfe/start!

© www.soinside.com 2019 - 2024. All rights reserved.