chart.js - Clojurescript/Reagent/Chart.js - 试剂生命周期 - Chart.update()

标签 chart.js clojurescript reagent chartjs-2.6.0

我们将 Chart.js 与 clojurescript 和 Reagent 一起使用。现在我知道 Chart.js 有一个 Chart.update() 方法来用新数据更新图表。所以问题是,如何设置我的组件,以便它在 :reagent-render 上渲染图表,但可能得到 :component-will-update 来调用 Chart.update() 方法?

基本上,有没有办法获取从 :component-will-update 函数中的 :reagent-render 函数创建的图表的句柄?

最佳答案

在这种情况下,您遵循的通常模式是将有状态/可变对象包装在 React 组件中并使用 React 的生命周期方法。

re-frameUsing-Stateful-JS-Component 详细描述了该方法。但这就是我在 D3 中倾向于这样做的方式:

(defn graph-render [graph-attrs graph-data]
  ;; return hiccup for the graph here
  (let [width (:width graph-attrs)
        height (:height graph-attrs)]
    [:svg {:width width :height height}
     [:g.graph]]))

(defn graph-component [graph-attrs graph-data]
  (r/create-class
   {:display-name "graph"
    :reagent-render graph-render
    :component-did-update (fn [this]
                            (let [[_ graph-attrs graph-data] (r/argv this)]
                              (update! graph-attrs graph-data)))
    :component-did-mount (fn [this]
                           (let [[_ graph-attrs graph-data] (r/argv this)]
                             (init! graph-attrs graph-data)))}))

(defn container []
  [:div {:id "graph-container"}
   [graph-component
    @graph-attrs-ratom
    @graph-data-ratom]])

保留外部/内部组合非常重要,否则 React 将无法正确填充其 props。

另一件需要注意的事情是 reagent/argv 向量的返回,正如您所看到的,它包含第一个项目之后的 Prop 。我在上面的 wiki 页面中看到过(reagent/props comp),但我自己从未尝试过。

关于chart.js - Clojurescript/Reagent/Chart.js - 试剂生命周期 - Chart.update(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47230863/

相关文章:

javascript - 如何选择日期范围(如 onClick 但拖动/选择)

javascript - 未捕获的 TypeError : lineChart. Line 不是 Chart.js 中的函数

clojure - 如何使 devCards 与 re-frame 一起使用?

reactjs - 如何准备 React.js 组件以在 ClojureScript 中用作外部 Reagent 组件?

javascript - 具有最小高度和零值的条形图 - ChartJs

javascript - Chart.js 标签中的 HTML

javascript - 在 NVD3 和 ClojureScript 中设置图表的静态刻度数

java - 尝试编译 clojurescript 时出错

clojurescript - om get-props 与 get-state

clojurescript - 试剂:如何从 component-will-receive-props 中获取新的 props?