市面上的数据可视化工具很多,大体分为3类:
1、专业图表制作类,专业的图表制作网站/软件,针对性的制作一些可视化图表,一般不带有数据处理功能
2、开发工具,比如python,调用第三方可视化库可以制作非常个性化的可视化图表,门槛高,要会写代码
3、零代码可视化分析工具,比如BI工具,操作简单,门槛低,自带数据处理功能,适合普通的业务人员或者数据分析师
专业图表制作网站
1、Flourish
推荐人群:可视化爱好者
我用过最好用的免费可视化在线网站,拥有非常丰富的可视化模板,操作非常便捷,个性化程度稍微差一点,唯一的缺点是界面全英文,看起来有点费劲
2、图表秀
国内免费的在线图表制作工具,支持自由布局与联动交互分析。主要看中它几点:图表新颖丰富,操作简单一键替换,支持一键导出PPT、在线动态数据展示。不过和大部分图表制作网站一样,个性化程度不高,样式受模板限制。
除了这种综合性的图表制作网站,还有针对地图、词云图等特殊图表制作的网站,比如:
数据地图:PolyMaps
词云图:微词云
开发工具
1、E charts
百度出品的开源免费的javascript数据可视化工具,专为大数据量可视化设计的,数据实时展现,需要一定的代码能力
2、D3.js
开源的可视化库,在 JS 绘图界的地位很靠前。功能非常强大,灵活性高,很多其他的库都是基于它所开发。非常适合开发者学习研究,需要牛逼的编程功底,门槛较高。
3、Highcharts
国外的产品,对标的是E charts,两者用起来差不多,图表种类也很丰富,不过和E charts一样都需要进行二次开发,它的优点是它有详细的文档,示例和详细的 CSS,产品稳定性好,缺点是商用版付费。
零代码工具
1、tableau
全球知的数据可视化工具,除了可视化图表制作,还带有数据处理、数据连接功能,是一个专业的数据分析工具,操作简单,图表设计也比较简洁,个性化程度高用。入门门槛低,一般的业务人员就能上手,缺点是免费版功能有限,收费版对于个人用户来说有点贵。
2、FineBI
和tableau类似的一款数据分析工具,国产的,图表制作方法和tableau基本差不多,也带有数据处理、数据链接功能,主打的是数据分析,可视化图表非常丰富,而且带有智能图表推荐功能。操作相比于tableau更加符合中国人的使用习惯,而且个人版免费,功能和收费版相比,没有阉割
你为什么选择React而不选择Vue?
前端领域,选择框架是根据使用场景、业务需求、技术实现等综合因素考虑的,选择最适合的才能发挥最大效果。
目前前端三大主流框架有:React、Vue、Angular,他们在各自特定的场景下使用都非常出色。其中,Vue是不错的渐进式JavaScript库,更易于样式开发构建UI。而我更倾向于选择React,因为React具有独特优势:
- React函数式编程理念使代码更优雅和合理
- 严谨的单向数据流设计,方便构建大型复杂稳定的单页面应用
- 丰富的技术生态圈,拥有世界范围内各大技术社区支持
- 方便配合ReactNative开发跨终端应用
React的函数式编程理念使代码更优雅和合理
函数式编程设计思想。函数式编程是用函数的组合来进行编程。先声明函数,然后调用函数,每一步都有返回值,通过抽出每一步逻辑运算抽象,封装在函数中。再将函数组合来编写程序。例如:计算平均值百分比,我们可以拆分为三个函数,一个是计算平均值,一个是计算百分比,一个是综合调用的函数,通过函数嵌套函数的方式,使得代码更优雅,更有利于复用。
React使用函数式编程思想使代码更优雅和合理,更有利于组件化、模块化开发。React的每个组件就是函数生成,页面的渲染过程本质就是函数的嵌套调用过程。React的这种设计对于使用来说非常方便,例如以下子组件嵌套子组件再嵌套子组件示例:子组件中嵌套子组件调用模式始终都是相同的。父组件调用子组件都只需要考虑传递的参数props,而子组件只需要考虑传入的参数。
严谨的单向数据流设计,方便构建大型复杂稳定的单页面应用
React的数据流始终是单向设计的,严格遵照数据驱动DOM。这样的好处是,降低了组件互相通信的代码耦合度,数据流更清晰,调试更方便。大型复杂单页面应用一直是企业的难题,传统方式开发都不能够很好的维护。而使用React为基础的技术栈,能够方便地拆分模块、组件,再配合Redux数据流管理,能够高效构建应用。事实证明,这种React、Redux的大型复杂单页面项目构建方案,已经在各大互联网公司得到应用和发展。
丰富的技术生态圈,拥有世界范围内各大技术社区支持
React是由Facebook公司开发的高品质现代化前端框架,具有很高的权威性和专业性,在世界范围内得到各大技术社区支持,包括国内的技术社区。比如,npm官网、淘宝cnpm社区等都有很丰富的生态。众多的开发者共同添砖加瓦,开源共享,丰富了技术生态圈,让我们方便学习和使用基于React的组件、插件,减少开发成本,提高开发效率。在国内,由阿里巴巴公司开发的基于React基础开发的Antd组件库深受各大互联网企业好评,开箱即用,为加速国内中小企业的中台化、信息化推进起到了重要作用。
方便配合ReactNative开发跨终端应用
当前互联网公司的一个重要难题问题是:如何减少成本、高效的进行跨终端应用开发。也就是说,互联网公司都希望能够开发iOS、Android、H5应用。React配合ReactNative库能够方便地开发跨终端应用。ReactNative设计原理上和React一致,使用了React技术栈,就已经有了基础,再配合ReactNative就能一套代码,编译生成多端应用。ReactNative方便众多公司快速高效开发App,降低研发成本,提高了生产力,减少了开发时间。
React、Vue发展趋势
React的发展趋势更注重函数式编程。当前从16.7版本以后,出现了Hook函数钩子的思想,只能是React函数式的组件才能使用。这一特性很明显,React希望将函数式编程发挥极致,更优更好地项目开发。有趣的是,这里出现了useMemo函数,像极了Vue中的computed的作用,这里React就是借鉴了Vue的动态监听变量的模式。
Vue的发展趋势为更注重了项目标准化、严谨化。在Vue3中已经开始使用了TypeScript替代不够严格的JavaScript写法。而引入TypeScript这一点是借鉴了React的能够深度融合TypeScript更严谨开发的经验。
React、Vue发展趋势表明,两种框架互相汲取,取长补短,都是为了能够更好地进行应用开发。
如何正确选择框架
面对React、Vue,我们应该怎么选。这里提供一些思路:
- 小型偏重于项目如果是偏重于UI展现,更多的样式开发,推荐使用Vue。发挥Vue模板样式的优势。
- 具有复杂的数据逻辑应用如中台化项目,建议使用React。单向数据流的模式能够避免数据逻辑错误。
- 大型复杂单页面项目,推荐React。再配合如Redux、Mbox等状态管理库,组件化、模块化开发,有效管理。
写在最后
React、Vue都是出色的前端框架,都有各自的一席之地。React框架的函数式编程理念、严谨的单向数据流设计、丰富的技术生态圈以及方便开发跨终端应用具有更大优势。我们只有根据使用场景、业务需求、技术实现等综合因素选择最适合的框架,才能发挥最大的优势,提高生产力。
以上是我的观点,希望对你有所帮助。
如何用js实现一个简单的react?
!
写一个react应用,可以分为以下几步:
1、写组件
组件分为类组件和函数式组件,类组件需要继承react的Component基类,有自己的生命周期钩子函数
2、状态管理
数据由props传入,类组件内部可以通过state控制组件自身的状态变化(setState)
3、调用入口函数
ReactDOM.render
4、通过webpack(babel处理jsx)打包编译即可生成react应用
在react中有一个虚拟dom的概念,那么虚拟dom是什么呢?其实它是一个对象,如下图:
它就是对jsx的描述,jsx并不能当做真正的dom插入页面中,需要做进一步的转化,babel会把jsx转化为一堆由createElement组成的执行函数,如下:
再由createElement返回的数据拼装成上面所说的虚拟dom。
那么要实现一个react,需要实现createElement、render和Component三个部分!
1、createElement函数
第一个参数type是类型,可能是类、函数、dom的tagName,第二个参数props就是定义在jsx中标签的属性包括自定义属性和自定义事件
2、render
render索要完成的事情就是将虚拟dom渲染成真实的dom,并且可以更新!办法就是遍历这个虚拟dom树。
-
遇见dom标签,生成dom节点,从props中拿出属性和事件(事件的key都是以on开头),完成绑定,append进父元素中。
-
遇见类组件,直接new出一个实例,运行实例的render方法,生成组件的虚拟dom,展开递归,遇见dom标签就加入父元素中,在这个阶段是可以运行生命周期中各个钩子函数的。
-
遇见函数,直接执行,生成组件的虚拟dom,展开递归,遇见dom标签就加入父元素中。
3、diff(插入一点)
如何做到diff呢?其实就是在内存中保留上一次的虚拟dom树,待生成新的虚拟dom树后,就可以逐层做diff,这就是为什么在写react的state时候需要生成新的对象断开引用,为的就是不能影响diff。react是在属性、类型等改变时有一套规则,diff规则可以自己定,不一定要沿用react的。
之前出去面试,别人问我如果有一千个 一万个节点如何对比,递归下去依然性能很差,被问的垭口无语!读者可以自己思考一下!
4、Component
这个基类比较简单,就是实现一个setSate方法,在方法中调用更新逻辑。
综上,实现这个几个功能基本就能实现一个react了,不过还是比较复杂的,特别是递归那块!
喜欢我的回答就关注我吧,有问题可以发表评论,我们一起学习,共同成长!