我學習ClojureScript,我有兩個功能,只是更改「根應用」的內容DIV:ClojureScript功能
(ns blog.core)
(defn mount-components []
(let [content (js/document.getElementById "root-app")]
(while (.hasChildNodes content)
(.removeChild content (.-lastChild content)))
(.appendChild content (js/document.createTextNode "Wilkommen zu mein
ekelhaft blog!!"))))
(defn init! []
(def current_url js/window.location.href)
(if (clojure.string/includes? current_url "about")
(.log js/console (str "Whatever URL ->>>" js/window.location.href))
(mount-components)))
所有工作正常http://localhost:3000/about因爲「根應用「分區存在於該頁面,但在http://localhost:3000/blog,我得到錯誤信息:
因爲在該頁面沒有這樣的股利。這一切都是奇怪,因爲它看起來像ClojureScript事實上認定:
(if (clojure.string/includes? current_url "about")
其實是假的EN不打印的console.log。
我的問題是:爲什麼功能安裝組件運行併發送,即使有條件如果是虛假的錯誤信息?奇怪的是,該執行console.log:
(.log js/console (str "Whatever URL ->>>" js/window.location.href))
不運行,但安裝組件功能一樣。我想我並不瞭解ClojureScript工作方式下的「序列」。
顯然'content'爲空。元素ID是否正確?這基本上是一個NPE。 – Carcigenicate
只有在找到元素時才用'let-let'替換'let'。見https://clojuredocs.org/clojure.core/when-let –
你(幾乎)永遠不應該在函數作用域內使用'def',這是你在'init!'函數中做的。 'def'在全局範圍內創建一個var。改用'let'使用本地綁定。 –