当前位置: 首页 > Web前端 > HTML5

从一个开源的小项目,到一个庞大的开源矩阵,他是怎么做到的?

时间:2023-04-05 00:55:18 HTML5

大家好,我是Kason。很多开源作者都经历过这样的过程:一个好的开源想法挽起袖子努力工作,最终获得社区对一个开源项目的认可。星星的数量是他们的动力。看不懂。。。)心灰意冷,渐渐不再维护了。今天要介绍的主角TannerLinsley是ReactTable和ReactQuery的作者。与其他开源作者在热情消退后项目逐渐被放弃不同,TannerLinsley不仅不断迭代项目,而且随着维护的项目越来越多,形成了一个项目矩阵。上面提到的ReactTable、ReactQuery,再加上其他四个项目已经合并到TanStack项目中,形成一个统一的品牌(TanStack):他是怎么做到的?这篇文章就是要说说TannerLinsley的开源之路。欢迎加入人类优质前端框架群,带来开源飞扬的福利。说到开源,大家会想到很多标签——免费、用爱发电、贡献……但实际上,如果任何一个作品没有稳定的物质利益(没错,我们说的是钱),它就是很难维持。传统上,开源作者主要依赖赞助(例如GithubSponsor)。与开源的工作量相比,赞助通常是九牛一毛。因此,开源作者很难扩大其维护项目的规模。Tanner在GithubSponsor上已经有180个赞助商,这已经很不错了。但从扩大维修工程规模来看,还不够。那么是什么让坦纳有稳定的收入,从而维持更多的项目呢?答案是:课程。TanStack矩阵中的TanStackQuery(即ReactQuery)官方课程已售出8万册。按照目前折现价156计算,这部分收入税前为1200万。虽然实际收入肯定达不到这个数字,但是百万的收入还是有的。因此,只要我们不断产出优秀的开源项目,就能获得稳定的课程收入,形成正反馈。那么,一个优秀的开源项目是如何诞生的呢?接下来说说ReactTable的发展历程。ReactTable的发展历程2015年,Tanner是一家创业公司nozzle的联合创始人。Nozzle的主要业务是:从谷歌搜索结果页面反向抓取数据,整合分析这些数据,提供给有SEO需求的广告商。这需要大量与数据可视化相关的工作。当时,nozzle的技术栈是Angular,用ag-grid来实现form。为了项目的后续发展,Tanner决定将项目整体迁移到React技术栈。但是当时React技术栈还没有优秀的表格组件,所以他决定自己实现一个。自用与开源的冲突ReactTable最初的版本完全是自用的,开源只是为了方便。ReactTable作为一个开源组件,最初的用法是这样的:与自用组件不同,开源组件需要满足尽可能多的人的需求。结果,随着ReactTable的star越来越多,问题也随之而来。例如:是否可以实现分页?我可以将自定义道具传递给Header组件吗?我可以使用CSS-In-JS吗?这些定制需求让Tanner疲惫不堪,也让ReactTable越来越臃肿。最终,ReactTable有137个props配置项来满足这些定制需求:接下来如何维护,是否允许ReactTable的配置项继续扩展?幸运的是,Tanner找到了解决方案,那就是renderprops。修改后的写法如下:ReactTable组件只负责表格的核心逻辑,内部逻辑交给renderprops实现。想要自定义标题?自己做。想要分页?自己做。在ReactTable的renderprops版本即将实现的时候,React核心团队发布了Hooks。于是,ReactTable重新开发了Hooks-based版本:乍一看,Hooks版本相比于renderprops版本,只是将ReactTable组件变成了一个useTable方法。但实际上,这是一个巨大的飞跃。因为,格局一下子打开了。Pattern开启renderprops可以认为是React的一个特性,与React相关。而Hooks本身只是一个具有特殊功能的函数,也就是说它可以独立于React而存在。得益于社区对ReactHooks思想的广泛接受,越来越多的框架实现了自己的Hooks(比如Vue3中的CompositionAPI)。因此,新版本的ReactTable被设计为与框架无关。简单来说,不同框架的表格组件可以通过@tanstack/table-core加上不同框架的适配器来实现:比如对于Solid.js,只需要适配它的细粒度更新和上下文就可以实现SolidTable:这种与框架无关的开源组件扩展了组件的受众,并降低了开发人员迁移技术堆栈后的入门成本。后记开源不是打架杀戮,而是世俗之道。按理说,AGGrid应该是TanstackTable的直接竞争对手。然而,基于双赢的态度,两人结成伙伴,共同致力于:教育前端开发者了解这两个库的差异,以及当一个库不能满足需求时如何选择相互推荐。为了让两者共同覆盖尽可能多的应用场景,AGGrid团队甚至是Tanstack的大赞助商:这种合作共赢、一起做大蛋糕(或寡头垄断)的开源模式值得向广大开源作者学习。你用过ReactTable或ReactQuery吗?您如何看待他们目前取得的成绩和效益?