![](/img/trans.png)
[英]How do I do timed page refresh in Clojurescript with Reagent?
[英]ClojureScript: how to change CodeMirror reactively with Reagent
我正在嘗試在我的網頁中嵌入 CodeMirror 以編輯多個代碼片段,一次一個。
為此,我:
node-defs-atom
。node-history-atom
,其中包含正在查看的片段的鍵這是不起作用的:
(defn editor [node-defs-atom node-history-atom]
(reagent/create-class
{:reagent-render (fn [] (do [:textarea
{ :value (@node-defs-atom (last @node-history-atom))
:auto-complete "off"}]))
:component-did-mount (editor-did-mount node-defs-atom node-history-atom)
}))
(defn editor-did-mount [node-defs-atom node-history-atom]
(fn [this]
(let [codemirror (.fromTextArea js/CodeMirror
(reagent/dom-node this)
#js {:mode "clojure"
:lineNumbers true})]
...... )))
使用reset!
更改node-history-atom
reset!
不對 CodeMirror 中的文本做任何事情。 我真的不確定出了什么問題。
如果有人能告訴我應該在哪里引用(@node-defs-atom (last @node-history-atom))
我將不勝感激。
提前致謝!
您可以嘗試其他方式來處理CodeMirror編輯器
在空節點上創建CM實例
(def cm (atom nil)) (reset! cm (js/CodeMirror. (.createElement js/document "div") (clj->js {...})))
然后你的視圖將是一個試劑類, wrapper-id
只是父類的id
(reagent/create-class {:reagent-render (fn [] @cm [:div {:id wrapper-id}]) :component-did-update update-comp :component-did-mount update-comp})
創建一個將CM附加到dom節點的函數
(defn update-comp [this] (when @cm (when-let [node (or (js/document.getElementById wrapper-id) (reagent/dom-node this))] (.appendChild node (.getWrapperElement @cm))))
如果您想要更詳細的答案,此要點可能會有所幫助: https : //gist.github.com/jaredly/3d227a0275a66dcfb1f3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.