在我的应用程序中,我使用D3.js进行一些可视化.
现在D3使用可变的本机JavaScript数据结构.
因此,一些数据编组对于使用Immutable.js是必要的.
我也使用Relux和React,所以在我的商店里我管理一个不可变的地图.由于这个Map在每次更改时都会成为新东西,因此我无法将其传递给D3 Force Layout,因为它适用于可变数据,因此每次从头开始重新计算所有内容.
我最终管理了不可变和可变数据结构,但这感觉非常错误.
我发现了一篇文章,Practical Time Series Visualization using D3 + OM,
这似乎触及了主题,并建议使用游标.问题是当我使用JavaScript时它使用Clojure(脚本).
解决方法
我认为没有理由为什么d3.js不适用于immutable.js.在我看来,关键是要了解d3.js如何处理数据,尤其是d3.js数据如何加入工作.
数据连接 – 数据如何绑定到d3.js中的DOM元素
每次选择节点d3.selectAll(‘div’)并与.data([1,3,5,9])连接时,d3.js将比较已存在的div元素是否绑定到数据元素.这是通过评估所选div DOM节点是否具有关联的__data__属性来完成的. data属性由d3.js设置和维护.默认情况下,连接数组中的索引是进入__data__的索引.但您也可以定义一个键函数来覆盖此行为.
进一步阅读
How selections work,其中Mike Bostock解释了d3.js如何通过上述数据绑定机制计算输入,更新和退出选择.