将React与D3集成
Integrating React with D3
我在React中创建了一个表单,其中我输入了一条线的2个坐标,我一直在尝试使用d3来显示该线。下面是到目前为止的代码:
dashboard.js
import DrawLine from './d3/drawLine.js';
var Dashboard: React.createClass({
.......
.......
render: function(){
return(
<div className="dashboard">
<Dashform onFormSubmit={this.handleFormSubmit} />
<DrawLine x1={this.state.x1} y1={this.state.y1} x2={this.state.x2} y2={this.state.y2} />
</div>
);
}
});
var Dashform: React.createClass({
....
.....
}};
export default Dashboard
drawLine.js
import React from 'react';
import d3 from 'd3';
var DrawLine = React.createClass({
propTypes: {
x1:React.PropTypes.number,
y1:React.PropTypes.number,
x2:React.PropTypes.number,
y2:React.PropTypes.number
},
render: function(){
var lineData = [ { "x": this.props.x1, "y": this.props.y1 },
{ "x": this.props.x2, "y": this.props.y2 } ];
var lineFunction = d3.svg.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
.interpolate("linear");
var svgContainer = d3.select("body").append("svg")
.attr("width", 200)
.attr("height", 200);
var lineGraph = svgContainer.append("path")
.attr("d", lineFunction(lineData))
.attr("stroke", "blue")
.attr("stroke-width", 2)
.attr("fill", "none");
return(
<div>
<svg width = "500" height = "500" >
{lineGraph}
</svg>
</div>
);
}
});
export default DrawLine
我得到以下错误Uncaught TypeError:无法读取未定义的属性'svg'。下面这行导致了错误:
d3.svg.line()
我需要npm安装一些包吗?有人遇到过类似的问题吗?
编辑1:使用import * as d3 from "d3"解决了指定的错误最新版本的d3有d3.line()而不是d3.svg.line()。所以我对DrawLine做了如下修改:
var lineFunction = d3.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; });
我的问题是我如何渲染直线??当前语句:
{lineGraph}
出错了。
我能够生成输出。下面是修改后的代码:
drawLine.js
import React from 'react';
import ReactDOM from 'react-dom';
import events from 'events';
import * as d3 from 'd3';
var DrawLine = React.createClass({
propTypes: {
x1:React.PropTypes.number,
y1:React.PropTypes.number,
x2:React.PropTypes.number,
y2:React.PropTypes.number
},
render: function(){
var lineData = [
{ "x": this.props.x1, "y": this.props.y1 },
{ "x": this.props.x2, "y": this.props.y2 } ];
var lineFunction = d3.line()
.x(function(d) { return d.x; })
.y(function(d) { return d.y; })
return(
<svg>
<g>
<path className = "drawLine" stroke="blue" strokeWidth="2" d = {lineFunction(lineData)} />
</g>
</svg>
);
}
});
export default DrawLine
主要问题是strokeWidth默认设置为0,因此该行不可见。
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 如何检测用于WebGL的专用或集成显卡
- 如何在d3.js中返回路径的y坐标
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- 为什么我的d3.jsselectAll+过滤器没有过滤
- 使用D3.js计算带有字母间距的文本长度
- d3中堆栈函数和嵌套函数之间的差异
- D3.js模式不适用于弧形或圆环图
- d3.js Chord图的动态工具提示
- 借助D3.js集成Datatables插件
- 将 D3 集成到 Spotfire 中
- AngularJS与D3.js的集成
- 将d3与自定义的angular指令集成在一起
- 将d3图表与reactjs集成
- 需求,d3和nvd3集成
- 将React与D3集成
- 陷入了d3与数据的集成
- 将Angular创建的元素与D3集成的最简单方法