我想将以下JavaScript转换为ClojureScript:
select
创建此函数后,您应该可以使用数字进行调用:
array
我的尝试如下:
toArray()
礼物:
react-dom.development.js:16545未捕获的TypeError:module $ node_modules $ d3_scale $ dist $ d3_scale.scaleLinear.domain不是函数
答案 0 :(得分:2)
scaleLinear
是可以从d3
调用的函数。这不是应该构建的东西。因此,这是一个更好的答案:
(-> d3
(.scaleLinear)
(.domain #js [min-y max-y])
(.range #js [1 0]))
我在需求上遇到了麻烦,所以这里是相关的:
["d3" :as d3]
["d3-scale" :refer (scaleLinear)]
这是使用shadow-cljs而不是cljsjs。
要求输入“ d3”的麻烦在于您需要拉入整个库。 这是另一种方法:
(-> (scaleLinear)
(.domain #js [min-y max-y])
(.range #js [1 0]))
似乎,每当您需要某些东西时,都可以按需直接使用它,而忘记了互操作点。
也(:require ["d3" :as d3])
表示您将d3拉入本地范围。 js/d3
是全局范围,因此如果需要,请使用d3
。即js
是您可以忘记的另一项“互操作”内容。
另一方面,不需要domain
和range
,因此需要遵守互操作规则。
总而言之-解决的主要问题是scaleLinear
是一个函数,因此实际上需要调用它!
这个问题是在探索通过React Vis使用d3的开始时提出的-见https://medium.com/@cjmurphy/using-react-vis-from-clojurescript-787d02281f7c
答案 1 :(得分:0)
经过反复试验,我确实可以正常使用它。这些都是等效的:
(-> (new scaleLinear)
(.domain (clj->js [0 10]))
(.range (clj->js [0 600])))
(-> (new scaleLinear)
(. (domain (clj->js [0 10])))
(. (range (clj->js [0 600]))))
(-> (scaleLinear.)
(.domain #js [0 10])
(.range #js [0 600]))