javascript - D3 : setting style conditionally with immediately invoked arrow function and ternary

标签 javascript d3.js ecmascript-6

我正在学习 D3 的 FreeCodeCamp beta 类(class),并尝试有条件地设置颜色。

尝试使用立即调用的箭头函数和三元来设置它是行不通的。

.style("color", ((d)=>{
      d <20 ? return "red"; : return   "green";
    })());

知道为什么吗?

最佳答案

正如 @altocumulus 所说,最简单的方法是向 d3 的 style setter 传递一个函数:

.style("color", d => d < 20 ? "red" : "green")
每当调用此行时,

D3 将在给定 d 值的情况下求解此函数。如果数据发生变化,并且再次调用此 style setter,颜色将会更新。

如果这不是您想要的,您可以像您一样使用匿名闭包,并进行以下更改:

.style("color", (d =>
    d < 20 ? "red" : "green"
)(someVariable))

您可能想要执行此操作的一个原因是,如果颜色取决于某个动态变量,而该变量未包含在您传递给此选择的数据中,例如当前日期。您可以在 someVariable 的位置按名称传递此变量。

当前箭头函数的主要问题是您没有将括号内的变量传递给它,因此 d 将是未定义的。剩下的只是语法:

  1. 在箭头函数中,如果函数体是单行函数,则隐含 return 语句。
  2. 三元运算符有它自己的“返回”能力。将其视为一个微功能:

    var foo = (a ? b : c);
    

本质上是:

var foo = (function (a) {
    if (a) return b;
    else return c;
})(a);

关于javascript - D3 : setting style conditionally with immediately invoked arrow function and ternary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593251/

相关文章:

javascript - 如何知道 HTMLTableDataCellElement 的整个文本被选中

javascript - 是否可以使用 javascript :window. print() 返回值?

javascript - 单击节点重新加载 d3.js 图形

javascript - 当 x 值不完全匹配时,如何使用 d3.js 将多个折线图正确聚合/分组为一个总体图?

javascript - 在 'load' 而不是鼠标事件上调用 D3.JS 函数

javascript - javascript es6 中的静态方法发生了什么?

javascript - 如何重新加载 angularjs 范围数据而不重新渲染绑定(bind) View

javascript - 如何保存可拖动对象的位置

import - ES6 简写导入

javascript - 使用 Aurelia 有条件地显示 Element