我在我的reactjs项目中从d3.js导入了tube-map。但是由于未正确导入而出现以下问题。我遇到的问题显示在以下sceenshot中:
以下是我正在使用的代码。我已经使用npm安装了d3-tube-map。也许我缺少正确导入d3-tube-map的导出值的方法。关于这个问题有帮助吗?
import React, { Component } from "react";
// import d3 from "d3";
import d3 from "d3-tube-map";
import "d3-tip";
import tubeData from "./JSON/tube_data.jsx";
class TubeMap extends Component {
componentDidMount() {
var container = d3.select("#tube_map_101");
var width = 700;
var height = 400;
var map = d3
.tubeMap()
.width(width)
.height(height)
.margin({
top: 20,
right: 20,
bottom: 40,
left: 100
})
.on("click", function(name) {
console.log(name);
});
// d3.json("./stations.json", function (error, data) {
container.datum(tubeData).call(map);
var svg = container.select("svg");
zoom = d3
.zoom()
.scaleExtent([0.5, 6])
.on("zoom", zoomed);
var zoomContainer = svg.call(zoom);
var initialScale = 2;
var initialTranslate = [100, 200];
zoom.scaleTo(zoomContainer, initialScale);
zoom.translateTo(
zoomContainer,
initialTranslate[0],
initialTranslate[1]
);
function zoomed() {
svg.select("g").attr("transform", d3.event.transform.toString());
}
// });
}
render() {
return <div id="tube_map_101" />;
}
}
export default TubeMap;
答案 0 :(得分:0)
是的,您的进口商品不太正确。如果您查看npm page for this module上提供的示例,则它同时使用d3和d3-tube-map。
<script src="https://d3js.org/d3.v4.js"></script>
<script src="../dist/d3-tube-map.js"></script>
这给出了一个线索,但是在使用ES6导入时如何做却无济于事。查看module over on github的代码,我将首先尝试一下(排除很多行):
import tubeMap from "d3-tube-map";
...
var map = tubeMap()
我在github上注意到的是tubeMap模块已经在其中导入了d3。因此,也许您不需要自己导入d3。
如果上述方法不起作用,则可能必须同时导入d3和d3-tube-map,在这种情况下,我不确定它们应如何一起用作导入。如果是这样,我会在github上与作者一起打开一个问题,以获取示例。
编辑:事实证明,您需要按照下面的代码片段从每个模块导入所有组件。
import * as d3 from "d3";
import * as tubeMap from "d3-tube-map";
import tubeData from "./data/tubeData.jsx";
class TubeMap extends Component {
componentDidMount () {
d3.tubeMap = tubeMap.tubeMap
this.renderMap()
}
renderMap() {
var container = d3.select("#tube_map_101");
var width = 700;
var height = 400;
var map = d3
.tubeMap()
.width(width)
.height(height)
etc.