gpt4 book ai didi

d3.js - ReactJS + d3JS 组件中 d3.event 为 null

转载 作者:行者123 更新时间:2023-12-03 13:19:34 25 4
gpt4 key购买 nike

我正在使用 ReactJS、d3JS 和 ES6 创建组织结构图。我可以创建图表并查看它。但我想向图表添加缩放行为,因此我使用了d3.behavior.zoom。我可以看到调用了 zoomed 方法,但 d3.event 为 null。

在我的 ASP.NET 项目中,我确保除了 systemJS 配置之外,我没有任何对 d3.js 的引用,许多 stackoverflow 答案都提到与 相关的问题d3.event 为空。

这是我的 systemJS 配置:

<script>
System.defaultJSExtensions = true;
System.config({
map: {
'rx': "https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.0.7/rx.all.min.js",
'react': 'https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react.js',
'react-dom': 'https://cdnjs.cloudflare.com/ajax/libs/react/15.0.1/react-dom.js',
'd3': 'https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.16/d3.js'
}
});
System.import('../app/app.js');
</script>

组织图表组件:

import React, { Component } from 'react';
import * as Rx from 'rx';
import * as d3 from 'd3';
import Person from './person';

class OrgChart extends Component {

constructor(props) {
super(props);

this.state = { persons: [] };
}

componentWillMount() {
var source = Rx.Observable.fromPromise($.getJSON("/js/org-persons.json"));

source.subscribe(
function(chart) {
var tree = d3.layout.tree()
.nodeSize([110, 50])
.separation(function() {
return 1;
});

var nodes = tree.nodes(chart[0]).reverse();

var links = tree.links(nodes);

var p = [];

nodes.forEach(function(node) {
fs.push((<Person x={node.x} y={node.y}></Person>));
}.bind(this));

this.setState({ person: p });

}.bind(this)
);
}

componentDidMount() {
var rootX = document.body.clientWidth / 4;
var rootY = 300;

var zoom = d3.behavior.zoom()
.scaleExtent([1, 10])
.on("zoom", this.zoomed)
.translate([rootX, rootY]);

d3.select("#viewport")
.call(zoom);
}

zoomed() {
d3.select("#viewport").attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}

render() {

return (
<svg id='fullTree' width='100%'>
<g id='viewport'>
{ this.state.persons }
</g>
</svg>
);
}
}

export default OrgChart;

最佳答案

如果您使用的是 React、Babel 或 Webpack 以及 d3.js v4,您似乎需要从 d3-selection 导入 event 才能使用 d3.event

import * as d3 from 'd3';
import {event as currentEvent} from 'd3-selection';

您现在可以像使用 d3.event 一样使用 currentEvent。请参阅https://github.com/d3/d3/issues/2733了解更多信息。

关于d3.js - ReactJS + d3JS 组件中 d3.event 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com