内容简介:d3是前端可视化领域最有名的工具了,这篇文章会简单介绍下 d3 这个工具。按照
d3
是前端可视化领域最有名的 工具 了,这篇文章会简单介绍下 d3 这个工具。
d3是什么
按照 官方文档 上说,d3 是一套数据可视化工具,用来帮我们建立数据驱动的 DOM 模型。(当然也包括图表),但是和 DataV、Echarts 之类图表不同的是: d3 并不是开箱即用的,使用 d3 需要对诸如 html、svg、canvas技术有足够的了解,同时也给我们开发提供了更多的灵活性。
这里的 条形图 可以看到 d3 是如何做可视化的。
d3包括那些组件
Selection
如果你之前接触过d3,那么你可能对d3 selection 的链式调用有所了解。和 jquery 一样,d3 封装了大部分 DOM 方法,调用其方法会返回一个 selection 对象,你可以接着在这个对象上对 DOM 进行增删改查,事件绑定等操作。
d3.selectAll("p").style("color", "blue");
数据映射
现代前端框架都强调数据驱动,D3中也有类似的概念。例如:
// 步骤1. 绑定数据和 selection var p = d3.select("body") .selectAll("p") .data([4, 8, 15, 16, 23, 42]) // 步骤2. Enter… p.enter().append("p") .text(function(d) { return d; }); // 步骤3. Exit… p.exit().remove();
步骤 1 中我们将 selection 和对应的数据映射起来,selection 中的一个节点对应了数组中一条数据。注意此时并不会生成真实的 dom 节点。步骤2、3 中我们分别声明了数据新增时和删除的 selection 操作。d3 会在数据变化时调用这些操作。
通过数据映射,d3 将数据和 selection 连接起来,使我们免受复杂 dom 状态的困扰,并且保证生成的 dom 是可预测的。enter 和 exit 可以让我们更细粒度的观测到数据的变化,从而作出对应的处理。(比如节点删除动画)
Layout
Layout ,顾名思义,是布局的意思。但d3中的layout强调的是算法而非渲染,这和dataV 或echarts 中将数据和配置传入,直接可以渲染图表不同。以 tree 为例:
d3 的 tree 会接受树结构的数据,经过 layout 的转换,加上坐标,然后数据绑定到 selection,渲染出树结构。可以看到,layout 只负责坐标转换和计算的部分,至于渲染,d3 不会帮你封装好,需要你主动的用 svg、canvas 甚至html进行渲染。
这里是使用 d3 渲染 一棵树的例子 。
在 React 中使用
react 和 d3 都强调数据驱动,所以将两者结合实际上是非常方便的。
我们只需要将数据保存在react中,把数据和 d3 连接起来,使用d3来绘制页面即可,比如 这个例子
需要注意的是,state 变化时 d3 并不会执行 enter 或者 exit 内的方法,需要我们手动 componentDidUpdate
声明周期中主动执行渲染操作。这和 Vue 和 React 的响应式是不同的,d3 并不会去监听 data 的变化,也就不会执行对应的 enter 或 exit 操作。
组件封装
组件化也是很重要的,特别在整个工程变得复杂之前。d3 中也提供了封装组件的方法。这就是 selection.call
方法,例如:
// 声明一个函数,接受 selection 作为参数 function makeStyle(selection) { selection .style("width", 300) .style("height", 300); } // 在 div 的 selection 上调用它 d3.select('div').call(makeStyle)
通过 selection.call
我们可以封装一些组件,在需要的地方调用即可。
但是当 react 和 d3 结合使用时,使用 react 组件还是 d3 组件呢?大多数情况下,这是要分场景来看的。
1. 当你的界面大部分是 react 渲染而来,而且没有太多交互性时,react 组件是比较好的。比如一个条形图:只需要接受数据和配置,直接渲染出页面。这时把条形图直接做成一个 react 函数式组件,接受 data 和 config,内部使用 d3 来渲染即可。
2. 还有一些情况交互复杂,父组件也是 d3 渲染来的,这时使用 d3 组件更佳。比如编辑器
总结
和 AntV、ECharts 不同,d3 没有引入新的图形描述语法。使用 d3 需要你了解底层的 svg、canvas 知识。这同时提高了开发难度和灵活度。如果你对图表有高度的自定义需求或者想要了解 svg,canvas 之类的技术,你可以使用d3。如果只是普通的图表,使用 Echarts 即可。
以上所述就是小编给大家介绍的《d3入门系列(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- TiDB入门(四):从入门到“跑路”
- MyBatis从入门到精通(一):MyBatis入门
- MyBatis从入门到精通(一):MyBatis入门
- Docker入门(一)用hello world入门docker
- 赵童鞋带你入门PHP(六) ThinkPHP框架入门
- 初学者入门 Golang 的学习型项目,go入门项目
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Database Design and Implementation
Edward Sciore / Wiley / 2008-10-24 / 1261.00 元
* Covering the traditional database system concepts from a systems perspective, this book addresses the functionality that database systems provide as well as what algorithms and design decisions will......一起来看看 《Database Design and Implementation》 这本书的介绍吧!