为什么要设置变量使其本身起作用?

问题描述 投票:2回答:1

我有两段代码,第一段无效,而第二段有效。

Piece#1

  let g = circle.data(that.nodes, d => d.id);
  g.exit().remove();
  g = g.enter().append("svg:g").call(drag).merge(g)

Piece#2

  let g = circle.data(that.nodes, d => d.id);
  g.exit().remove();
  g = g.enter().append("svg:g");
  g = g.call(drag).merge(g);

但是,有趣的是,如果我在无效代码的末尾登录g,则会得到:

enter image description here

但是如果我记录工作代码,我实际上会得到:

enter image description here

javascript d3.js
1个回答
2
投票

尽管注释中已经说明了问题,但必须提供正确的答案。

这里的主要概念是某些方法,例如enter(),返回new选择。话虽如此,让我们看看您的工作片段,Piece#1

let g = circle.data(that.nodes, d => d.id);

这是您的更新选择,所以我们将其称为update

然后,在那之后,您将拥有:

update = update.enter().append("svg:g").call(drag).merge(update)

如前所述,enter()返回新的选择。我们称它为enter。因此,事实上,您有:

update = enter.merge(update);

这是合并选择的正确(惯用方式)。

现在,让我们看看您的第二个(不起作用的)片段,Piece#2。在第三行中,您有:

update = update.enter().append("svg:g");

您刚刚将update转换为enter选择。因此,在下一行中,您将拥有:

enter = enter.merge(enter);

当然,这将不起作用:您正在合并输入选择。

© www.soinside.com 2019 - 2024. All rights reserved.