You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ClojureScript中使用c3.js实现图表失败,求助解决渲染问题

问题修复方案

你的代码里有两个关键问题导致C3图表无法渲染,逐一修正即可:

1. 错误使用Canvas元素而非Div

C3.js需要绑定到普通<div>元素(它会自动在内部生成SVG绘制图表),<canvas>是Chart.js这类库的用法,你这里混淆了两个库的DOM要求。

2. DOM元素ID错误

你在Reagent渲染函数里给元素设置的:id "#chart"是错误的——#是CSS选择器前缀,元素实际ID应为"chart",C3的:bindto配置里的"#chart"是用来选择这个ID的元素的。

修正后的完整代码

(defn new-chart[] 
  (println "Inside new chart ") 
  (let [c3-version (.-version js/c3)
        _ (println c3-version) 
        config-map {:bindto "#chart"
                    :data {:columns
                           [["data1" 30 200 100 400 150 150]
                            ["data2" 50 20 10 40 15 25]]}} 
        _ (println "Config map " config-map) 
        myjs (clj->js config-map)]
    (.generate js/c3 myjs)))

(defn rev-chartjs-component [] 
  (reagent/create-class {:component-did-mount #(new-chart)
                         :display-name "chartjs-component"
                         :reagent-render (fn []
                                           (println "Inside render function")
                                           [:div {:id "chart" :style {:width "700px" :height "380px"}}])}))

;; 调用组件
[rev-chartjs-component]

额外检查项

  • 确保已正确加载D3.js(C3.js依赖D3,必须先于C3加载)
  • 确认页面中没有其他元素使用chart这个ID,避免选择冲突

内容的提问来源于stack exchange,提问作者developerAtHeart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 12:07:10