Javascript 尝试导入错误:';行为';不是从';d3和x27;

Javascript 尝试导入错误:';行为';不是从';d3和x27;,javascript,reactjs,d3.js,npm,Javascript,Reactjs,D3.js,Npm,我正在尝试使用d3和react.js制作一个sankey图,并将此示例用作参考。我是一个相当新的反应(2天),我得到了这个错误-- 尝试导入错误:“行为”未从“d3”导出(作为“d3”导入) SankeyComponent.js 这是我创建SankeyComponent的代码。一旦我清除了一个错误,其他导入和导出错误就会出现 import React, { Component } from 'react'; import ReactFauxDOM from 'react-faux-dom'; i

我正在尝试使用d3和react.js制作一个sankey图,并将此示例用作参考。我是一个相当新的反应(2天),我得到了这个错误--

尝试导入错误:“行为”未从“d3”导出(作为“d3”导入)

SankeyComponent.js 这是我创建SankeyComponent的代码。一旦我清除了一个错误,其他导入和导出错误就会出现

import React, { Component } from 'react';
import ReactFauxDOM from 'react-faux-dom';
import * as d3 from 'd3';
import sankey from 'd3-plugins-sankey';
import _ from 'lodash';
import { NODES } from '../shared/nodes';
import { LINKS } from '../shared/links';

class Sankey extends Component {

     constructor(props) {
        super(props);

        this.state = {
            nodes: NODES,
            links: LINKS
        };
    }
    render() {

            // Set units, margin, sizes
            var margin = {top: 1, right: 1, bottom: 6, left: 1},
            width = 960 - margin.left - margin.right,
            height = 500 - margin.top - margin.bottom;

            var formatNumber = d3.format(",.0f"),
                format = function(d) { return formatNumber(d) + " TWh"; },
                color = d3.scale.category20();

            // Set the sankey diagram properties

            var sankey = d3.sankey()
                            .nodeWidth(15)
                            .nodePadding(10)
                            .size([width, height]);

            var path = sankey.link();

            //var freqCounter = 1;

            var graph = {
                  nodes: _.cloneDeep(this.state.nodes),
                  links: _.cloneDeep(this.state.links)
                };

            sankey.nodes(graph.nodes)
                  .links(graph.links)
                  .layout(32);

            // Initialize and append the svg canvas to faux-DOM

            var svgNode = ReactFauxDOM.createElement('svg');

            var svg = d3.select(svgNode)
                        .attr("width", width + margin.left + margin.right)
                        .attr("height", height + margin.top + margin.bottom)
                        .append("g")
                        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

            // Initialize and append the svg canvas to faux-DOM
            var link = svg.append("g").selectAll(".link")
                          .data(graph.links)
                          .enter().append("path")
                          .attr("class", "link")
                          .attr("d", path)
                          .style("stroke-width", function(d) { return Math.max(1, d.dy); })
                          .sort(function(a, b) { return b.dy - a.dy; });

            link.append("title")
                .text(function(d) { return d.source.name + " → " + d.target.name + "\n" + format(d.value); });

            // Add nodes

            var node = svg.append("g").selectAll(".node")
                          .data(graph.nodes)
                          .enter().append("g")
                              .attr("class", "node")
                              .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
                          .call(d3.behavior.drag()
                              .origin(function(d) { return d; })
                              .on("dragstart", function() { this.parentNode.appendChild(this); })
                              .on("drag", dragmove));

            node.append("rect")
                  .attr("height", function(d) { return d.dy; })
                  .attr("width", sankey.nodeWidth())
                  .style("fill", function(d) { return d.color = color(d.name.replace(/ .*/, "")); })
                  .style("stroke", "none")
            .append("title")
                   .text(function(d) { return d.name + "\n" + format(d.value); });

            node.append("text")
                  .attr("x", -6)
                  .attr("y", function(d) { return d.dy / 2; })
                  .attr("dy", ".35em")
                  .attr("text-anchor", "end")
                  .attr("transform", null)
                  .text(function(d) { return d.name; })
            .filter(function(d) { return d.x < width / 2; })
                  .attr("x", 6 + sankey.nodeWidth())
                  .attr("text-anchor", "start");

            var linkExtent = d3.extent(graph.links, function (d) {return d.value});
            var frequencyScale = d3.scale.linear().domain(linkExtent).range([0.05,1]);
            //var particleSize = d3.scale.linear().domain(linkExtent).range([1,5]);

            // the function for moving the nodes
            function dragmove(d) {
                d3.select(this).attr("transform", "translate(" + d.x + "," + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")");
                sankey.relayout();
                link.attr("d", path);
            }

            graph.links.forEach(function (link) {
                link.freq = frequencyScale(link.value);
                link.particleSize = 2.5;
                link.particleColor = d3.scale.linear().domain([0,1])
                .range([link.source.color, link.target.color]);
             })



            return (
        <svg>
          {svg.node().toReact()}
          </svg>
    );

    }
}

export default Sankey;
import React,{Component}来自'React';
从“react faux dom”导入ReactFauxDOM;
从“d3”导入*作为d3;
从“d3插件sankey”导入sankey;
从“lodash”进口;
从“../shared/NODES”导入{NODES};
从“../shared/LINKS”导入{LINKS};
类Sankey扩展组件{
建造师(道具){
超级(道具);
此.state={
节点:节点,
链接:链接
};
}
render(){
//设置单位、边距、大小
var margin={top:1,right:1,bottom:6,left:1},
宽度=960-margin.left-margin.right,
高度=500-margin.top-margin.bottom;
var formatNumber=d3.format(“,.0f”),
format=函数(d){返回formatNumber(d)+“TWh”;},
颜色=d3.scale.category20();
//设置sankey图表属性
var sankey=d3.sankey()
.诺德维特(15)
.nodePadding(10)
.尺寸([宽度、高度]);
var path=sankey.link();
//var-freqCounter=1;
变量图={
节点:u.cloneDeep(this.state.nodes),
links:u.cloneDeep(this.state.links)
};
sankey.nodes(graph.nodes)
.links(graph.links)
.布局(32);
//初始化svg画布并将其附加到faux DOM
var svgNode=ReactFauxDOM.createElement('svg');
var svg=d3.select(svgNode)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”、“平移”(+margin.left+)、“+margin.top+”);
//初始化svg画布并将其附加到faux DOM
var link=svg.append(“g”).selectAll(“link”)
.数据(图表.链接)
.enter().append(“路径”)
.attr(“类”、“链接”)
.attr(“d”,路径)
.style(“笔划宽度”,函数(d){return Math.max(1,d.dy);})
.sort(函数(a,b){返回b.dy-a.dy;});
链接。附加(“标题”)
.text(函数(d){返回d.source.name+”→ " + d、 target.name+“\n”+格式(d.value);});
//添加节点
var node=svg.append(“g”).selectAll(“node”)
.数据(图.节点)
.enter().append(“g”)
.attr(“类”、“节点”)
.attr(“transform”,函数(d){return“translate”(“+d.x+”,“+d.y+”)”);})
.call(d3.behavior.drag())
.origin(函数(d){return d;})
.on(“dragstart”,function(){this.parentNode.appendChild(this);})
.在(“拖动”,拖动)上);
node.append(“rect”)
.attr(“高度”,函数(d){返回d.dy;})
.attr(“宽度”,sankey.nodeWidth())
.style(“fill”,函数(d){return d.color=color(d.name.replace(/.*/,“”));}
.style(“笔划”、“无”)
.附加(“标题”)
.text(函数(d){返回d.name+“\n”+格式(d.value);});
node.append(“文本”)
.attr(“x”,-6)
.attr(“y”,函数(d){返回d.dy/2;})
.attr(“dy”,“.35em”)
.attr(“文本锚定”、“结束”)
.attr(“转换”,null)
.text(函数(d){返回d.name;})
.filter(函数(d){返回d.x
看起来像是
d3.behavior.drag
在v4中被重命名为
d3.drag


由于您使用的是d3 v4,您可以更新代码或降级到v3

是否将
SankeyComponent.js
的所有内容粘贴到此处?您使用的是哪一版本的
d3
?“d3”:“^4.0.0”“,@shkaper我将粘贴所有内容。请看一看,我已经把我的code@Sagivb.g我正在使用版本4。我必须使用版本5吗?因此我应该使用版本4并将代码更改为d3。拖动。/node_modules/fsevents/node_modules/node pre gyp/lib/info.js
import React, { Component } from 'react';
import ReactFauxDOM from 'react-faux-dom';
import * as d3 from 'd3';
import sankey from 'd3-plugins-sankey';
import _ from 'lodash';
import { NODES } from '../shared/nodes';
import { LINKS } from '../shared/links';

class Sankey extends Component {

     constructor(props) {
        super(props);

        this.state = {
            nodes: NODES,
            links: LINKS
        };
    }
    render() {

            // Set units, margin, sizes
            var margin = {top: 1, right: 1, bottom: 6, left: 1},
            width = 960 - margin.left - margin.right,
            height = 500 - margin.top - margin.bottom;

            var formatNumber = d3.format(",.0f"),
                format = function(d) { return formatNumber(d) + " TWh"; },
                color = d3.scale.category20();

            // Set the sankey diagram properties

            var sankey = d3.sankey()
                            .nodeWidth(15)
                            .nodePadding(10)
                            .size([width, height]);

            var path = sankey.link();

            //var freqCounter = 1;

            var graph = {
                  nodes: _.cloneDeep(this.state.nodes),
                  links: _.cloneDeep(this.state.links)
                };

            sankey.nodes(graph.nodes)
                  .links(graph.links)
                  .layout(32);

            // Initialize and append the svg canvas to faux-DOM

            var svgNode = ReactFauxDOM.createElement('svg');

            var svg = d3.select(svgNode)
                        .attr("width", width + margin.left + margin.right)
                        .attr("height", height + margin.top + margin.bottom)
                        .append("g")
                        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

            // Initialize and append the svg canvas to faux-DOM
            var link = svg.append("g").selectAll(".link")
                          .data(graph.links)
                          .enter().append("path")
                          .attr("class", "link")
                          .attr("d", path)
                          .style("stroke-width", function(d) { return Math.max(1, d.dy); })
                          .sort(function(a, b) { return b.dy - a.dy; });

            link.append("title")
                .text(function(d) { return d.source.name + " → " + d.target.name + "\n" + format(d.value); });

            // Add nodes

            var node = svg.append("g").selectAll(".node")
                          .data(graph.nodes)
                          .enter().append("g")
                              .attr("class", "node")
                              .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; })
                          .call(d3.behavior.drag()
                              .origin(function(d) { return d; })
                              .on("dragstart", function() { this.parentNode.appendChild(this); })
                              .on("drag", dragmove));

            node.append("rect")
                  .attr("height", function(d) { return d.dy; })
                  .attr("width", sankey.nodeWidth())
                  .style("fill", function(d) { return d.color = color(d.name.replace(/ .*/, "")); })
                  .style("stroke", "none")
            .append("title")
                   .text(function(d) { return d.name + "\n" + format(d.value); });

            node.append("text")
                  .attr("x", -6)
                  .attr("y", function(d) { return d.dy / 2; })
                  .attr("dy", ".35em")
                  .attr("text-anchor", "end")
                  .attr("transform", null)
                  .text(function(d) { return d.name; })
            .filter(function(d) { return d.x < width / 2; })
                  .attr("x", 6 + sankey.nodeWidth())
                  .attr("text-anchor", "start");

            var linkExtent = d3.extent(graph.links, function (d) {return d.value});
            var frequencyScale = d3.scale.linear().domain(linkExtent).range([0.05,1]);
            //var particleSize = d3.scale.linear().domain(linkExtent).range([1,5]);

            // the function for moving the nodes
            function dragmove(d) {
                d3.select(this).attr("transform", "translate(" + d.x + "," + (d.y = Math.max(0, Math.min(height - d.dy, d3.event.y))) + ")");
                sankey.relayout();
                link.attr("d", path);
            }

            graph.links.forEach(function (link) {
                link.freq = frequencyScale(link.value);
                link.particleSize = 2.5;
                link.particleColor = d3.scale.linear().domain([0,1])
                .range([link.source.color, link.target.color]);
             })



            return (
        <svg>
          {svg.node().toReact()}
          </svg>
    );

    }
}

export default Sankey;