【发布时间】:2015-09-07 06:16:41
【问题描述】:
我正在研究 c3.js 与 reactjs 的集成,以获取来自服务器端事件的实时数据。这是我到目前为止所拥有的:
https://jsfiddle.net/69z2wepo/15384/
C3js 具有流 API,可用于为新传入数据渲染部分图形 (http://c3js.org/samples/api_flow.html)。
但是我相信使用该 API 实际上会直接操作 DOM,而不是使用 react 的虚拟 DOM 概念。任何可能的解决方法的想法/建议。
我查看了现有的 NPM 模块,但找不到可以支持该用例的模块。
实际上,我想将图形从一个转换为另一个(通过 C3 API 得到很好的支持)。 C3 js 基于 d3 js。我知道 d3 js 与 react 绑定要好得多,但我需要通过 C3 更好地获得。
另外,在当前代码中,我使用的是bindto: '#chart_1',,它再次直接操作 DOM。我认为这不是渲染图形的最佳方式。对此的任何想法也值得赞赏。
代码:
var getDataFromStores = function() {
return [{
"proxy" : "10.0.1.15:1211",
"url" : "http://www.google.com/in/test",
"host" : "http://www.google.com/",
"time" : "Thu Sep 03 2015 02:34:04 GMT-0700 (PDT)",
"useragent" : "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.95 Safari/537.36",
"responsetime" : 200,
"pageSize" : 332
},{
"proxy" : "10.0.1.15:1212",
"url" : "http://www.google.com/in/try",
"host" : "http://www.google.com/",
"time" : "Thu Sep 03 2015 02:34:04 GMT-0700 (PDT)",
"useragent" : "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.95 Safari/537.36",
"responsetime" : 100,
"pageSize" : 200
},{
"proxy" : "10.0.1.15:1213",
"url" : "http://www.google.com/in/demo",
"host" : "http://www.google.com/",
"time" : "Thu Sep 03 2015 02:34:04 GMT-0700 (PDT)",
"useragent" : "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.95 Safari/537.36",
"responsetime" : 333,
"pageSize" : 500
}];
};
var Chart = React.createClass({
getInitialState: function(){
var state = {
data : {
json : getDataFromStores(),
type : 'line',
keys : {
x: 'url',
value: ['proxy', 'url','host','time','responsetime',"pageSize","useragent"]
}
},
axis : {
x: {
type: 'category'
}
}
};
return state;
},
componentDidMount: function(){
this._renderChart(this.state);
},
_renderChart: function(state){
var lineChart = c3.generate({
bindto: '#chart_1',
data: state.data,
axis: state.axis
})
},
render: function() {
this._renderChart(this.state);
return (
<div id="container">
<div id="chart_1"></div>
</div>
);
}
});
React.render(<Chart />, document.body);
【问题讨论】:
-
注意:我最近编制了一个 d3 与 react 问题的方法列表,请参见此处:gist.github.com/chroth7/a56fafed1efc43737d11。一个核心观点(Shirley Wu 的文章):“D3 永远不应该操纵 React 已经在跟踪的内容。”。你会发现很多方法(从 React 处理这一切到 D3 是(几乎)一切的主人......你是选择!另外,我刚刚在我的 lib 中添加了一些 c3 支持(见列表)。抱歉,这不是意味着作为一个促销员,我更愿意讨论方法......但stackoverflow并不是真正的讨论......
标签: javascript reactjs c3.js