我正在使用我喜欢的Reagent模板,但是我正在努力使会话数据从一个页面持久到另一个页面。
这是我的问题,只不过是一个独立的例子。首先执行“ lein新试剂rgtest”。向下钻取到“ handler.clj”文件并插入一些路由:
(reitit-ring/router
[
;INSERTION START
["/seshtest"
{:get {
:handler (fn [{session :session}]
{:status 200 :headers {"Content-Type" "text/html"}
:session (assoc session :seshvar (inc (:seshvar session 400)))
:body (html5 (head)[:body [:span (str (:seshvar session "~"))]])})}}]
["/seshtest2"
{:get {
:handler (fn [{session :session}]
{:status 200 :headers {"Content-Type" "text/html"}
:session (assoc session :seshvar (inc (:seshvar session 400)))
:body (html5 (head)[:body [:span (str (:seshvar session "~"))]])})}}]
;INSERTION END
现在,如果我做一个“ lein figwheel”,我可以浏览到该站点下的“ / seshtest”,重复刷新,然后看到一个递增的值。我还可以浏览到“ / seshtest2”,刷新,然后看到一个递增的值。
问题在于此数值不会在两页之间传播。也就是说,如果我浏览到“ / seshtest”并刷新直到看到“ 410”,然后浏览到“ / seshtest2”,则看不到411。我看到了〜的默认值,并且如果刷新我看到401、402等。
因此,URL更改时,我的会话被破坏了。相关地,当我将GET请求切换到另一个URL时,“ ring-session” cookie会更改为另一个值。
在我看来,这可能是由于试剂模板无法预期页面更改而发生的。有诸如Reagent单页应用程序之类的东西。这不是我要完成的工作,并不是我使用过的所有React应用程序都是真正的SPA,但也许模板期望有SPA。
如果是这样,我需要知道是否应该使用另一个模板。我需要在服务器端打ic,并重新加载CLJ和CLJS文件,但是如果我不得不牺牲让客户端React来获得跨页面会话,那么我可以接受。
如果使用“莱因试剂”模板时有一种简单的方法来完成我想要的事情,我也想知道这一点。
谢谢!