- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在一个使用Reagent和Re-frame的小型应用程序中,我正在使用多种方法来调度应基于应用程序状态中的值显示哪个页面:
(defmulti pages :name)
(defn main-panel []
(let [current-route (re-frame/subscribe [:current-route])]
(fn []
;...
(pages @current-route))))
(defmethod layout/pages :register [_] [register-page])
register-page
函数将生成实际 View 的位置:
(defn register-page []
(let [registration-form (re-frame/subscribe [:registration-form])]
(fn []
[:div
[:h1 "Register"]
;...
])))
(defmethod layout/pages :register [_]
(let [registration-form (re-frame/subscribe [:registration-form])]
(fn []
[:div
[:h1 "Register"]
;...
])))
pages
to square brackets,以便Reagent可以看到它:
(defn main-panel []
(let [current-route (re-frame/subscribe [:current-route])]
(fn []
;...
[pages @current-route])))
:about
和
:about2
,一条作为函数,一条作为方法:
(defn about-page []
(fn []
[:div "This is the About Page."]))
(defmethod layout/pages :about [_]
[about-page])
(defmethod layout/pages :about2 [_]
(fn []
[:div "This is the About 2 Page."]))
pages
的结果(当然必须使用显式调用而不是方括号)。包装的函数(起作用的函数)返回:
[#object[ninjatools$pages$about_page "function ninjatools$pages$about_page(){
return (function (){
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"div","div",1057191632),"This is the About Page."], null);
});
}"]]
#object[Function "function (){
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Keyword(null,"div","div",1057191632),"This is the About 2 Page."], null);
}"]
(defmethod layout/pages :about2 [_]
[(fn []
[:div "This is the About 2 Page."])])
(defn about-page []
(fn []
[:div "This is the About Page."]))
(defmethod layout/pages :about [_]
about-page)
[function]
,所以有点意义,但是应该自动调用该函数。
@current-route
输出到浏览器,如下所示:
[:main.container
[alerts/view]
[pages @current-route]
[:div (pr-str @current-route)]]
@current-route
是否已正确修改并且输出已更新,但不是
[pages @current-route]
。
最佳答案
因此,像这样的组件:[pages @some-ratom]
将在pages
更改或@some-ratom
更改时重新呈现。
从试剂的 Angular 来看,pages
自上次以来就没有改变过,它仍然是以前的相同多方法。但是@some-ratom
可能会更改,因此可能触发重新提交。
但是发生在此重新渲染时,将使用pages
的缓存版本来完成。毕竟,对于pages
而言,似乎没有改变。它仍然是以前的相同方法。
当然,pages
的缓存版本将是呈现的pages
的第一个版本-mutlimethod和的第一个版本,而不是,我们希望看到使用的新版本。
试剂执行此缓存,因为它必须处理Form-2函数。它必须保留返回的render函数。
最重要的是:由于存在缓存,除非您找到一种方法来完全炸毁该组件并重新开始,否则多重方法将无法很好地工作,这是目前最受好评的方法:
^{:key @current-route} [pages @current-route]
当然,炸毁该组件并重新启动可能会有其自身的不受欢迎的含义(取决于该组件中保留的本地状态)。
模糊相关的背景:
https://github.com/Day8/re-frame/wiki/Creating-Reagent-Components#appendix-a---lifting-the-lid-slightly
https://github.com/Day8/re-frame/wiki/When-do-components-update%3F
关于clojure - 为什么多方法不能用作试剂/重组的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33299746/
我正在尝试将初始焦点设置在输入元素上 (defn initial-focus-wrapper [element] (with-meta element {:component-did-mo
我有一个 html Canvas ,想在上面显示 Quil 草图。大多数 Quil 示例使用 defsketch 在静态 html 页面上定义的 Canvas 上进行绘制。我想在这个试剂组件中的 Ca
我有一个 html Canvas ,想在上面显示 Quil 草图。大多数 Quil 示例使用 defsketch 在静态 html 页面上定义的 Canvas 上进行绘制。我想在这个试剂组件中的 Ca
我正在尝试通过一个简单的绘图程序来掌握 clojurescript 中的试剂。 我正在寻找一个示例,说明如何使用 Reagi 以有原则的“FRP”风格访问鼠标位置。 . 在各种试剂示例中,我可以看到如
所以签名为component-will-receive-props就是这样: https://github.com/reagent-project/reagent/blob/master/src/re
我从 here 复制了一个两年前的要点.它现在与 Figwheel 一起工作,并使用更新版本的 Reagent/React。 我正在寻找一种通用方法来隔离出现在 Javascript 控制台中的此警告
如何将不同的 React 版本与 Reagent、Om、Rum、Quiescent 或 Brutha 一起使用? 最佳答案 self 回答,因为这个问题经常被问到: 首先,您必须告诉 Leininge
我是一名优秀的程序员,十分优秀!