咱们好,我卡颂。

许多开源作者都经历过如下过程:

  • 有个好的开源点子

  • 撸起袖子加油干

  • 开源项目获得社区认可,star数量便是自己的动力

  • 跟着保护时刻变长,遇到波折(时刻上的消耗、伸手党的不理解…)

  • 心灰意冷,逐渐停止保护

今天要介绍的主人公Tanner LinsleyReact TableReact Query的作者。

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

不同于其他开源作者在激情散去后项目逐渐荒废,Tanner Linsley不只继续迭代项目,并且跟着保护的项目越来越多,乃至构成了项目矩阵。

上面提到的React TableReact Query,再加上其他四个项目现已合并到TanStack项目下,构成了统一的品牌(TanStack):

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

他是怎么做到的?本文来聊聊Tanner Linsley的开源之路。

欢迎加入人类高质量前端结构研讨群,带飞

开源的收益

谈到开源,咱们会想到许多标签 —— 免费用爱发电奉献……

但事实上,任何工作如果没有稳定的物质收益(对,说的便是钱),都是很难继续的。

传统意义上,开源作者主要依靠资助(比方Github Sponsor)。

比较开源的工作量,资助通常是杯水车薪。所以开源作者很难扩展自己保护项目的规划。

Tanner在Github Sponsor现已具有180个资助者,算很不错的了。

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

但从扩展保护项目的规划视点看,还远远不够。

那么是什么使得Tanner有稳定的收益,从而保护更多项目呢?

答案是:课程

TanStack矩阵中的TanStack Query(即React Query)的官方课程 现已售出8w份了,按其时的折扣价156刀算,这部分收入有税前1200w刀了。

虽然实际收入肯定达不到这个数,但数百万刀的收益还是有的。

所以,只要继续产出优异的开源项目,就能获得稳定的课程收益,构成正反馈。

那么,一个优异的开源项目是怎么诞生的呢?接下来咱们聊聊React Table的开展史。

React Table开展史

在2015年时,Tanner是一家创业公司nozzle的联合创始人。

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

nozzle的主营业务是:反向爬取Google搜索成果页的数据,将这些数据整合分析后,提供给有SEO需求的广告主。

这就需求做许多数据可视化相关工作。

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

其时nozzle的技能栈是Angular,运用ag-grid完成表格。

为了项目的后续开展,Tanner决议将项目全体搬迁到React技能栈。

但其时React技能栈没有优异的表格组件,所以他决议自己完成一个。

自用与开源的抵触

React Table的最初版完全是为了满足自用,开源仅仅随手的事儿。

作为一个开源组件,React Table最初的运用方式如下:

<ReactTable
  data={data}
  columns={columns}
/>

自用组件不同,开源组件需求满足尽可能多人的需求。

所以,跟着React Tablestar越来越多,issues也接二连三。

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

比方:

  • 能够完成分页功能么?

  • 我能给Header组件传自界说props么?

  • 我能用CSS-In-JS么?

这些定制化需求让Tanner疲于奔命,也导致React Table越来越臃肿。

最终,React Table有了137个props装备项来应对这些定制化需求:

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

接下来该怎么保护,莫非任由React Table的装备项不断胀大么?

还好,Tanner找到了解决方案,那便是render props。改版后的写法如下:

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

ReactTable组件只担任表格的中心逻辑,内部的逻辑交给render props完成。

想要自界说表头?自己去完成。

想要分页?自己去完成。

render props版别的React Table就快完成时,React中心团队发布了Hooks

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

所以,React Table从头开发了根据Hooks的版别:

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

乍看之下,比较于render props的版别,Hooks的版别仅仅将ReactTable组件变为useTable办法。

但实际上,这是个巨大的腾跃。

因为,格式一下打开了。

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

格式打开

render props能够认为是React的一个特性,他是与React相关的。

Hooks自身仅仅是带有特殊功能的函数,这意味着他能够脱离React单独存在。

得益于React Hooks的思维被社区广泛承受,越来越多结构都完成了自己的Hooks(比方Vue3中的Composition API)。

所以,新版React Table被规划为结构不可知(Framework Agnostic)。

简略来说,由@tanstack/table-core再加不同结构的adapter就能完成针对不同结构的table组件:

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

比方,针对Solid.js,只需求适配他的细粒度更新context,就能完成Solid Table

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

这种结构不可知的开源组件扩展了组件的受众规模,也降低了开发者搬迁技能栈后的上手本钱。

后记

开源不是打打杀杀,而是人情世故。

按理说,AG Grid应该是Tanstack Table的直接竞争对手。但是,根据协作共赢的情绪,两者构成伙伴关系,一起致力于:

  • 教育前端开发者这两个库之间的差异以及怎么挑选

  • 当一个库不符合需求时,推荐对方。以求两者一起覆盖尽可能多的应用场景

AG Grid团队乃至是Tanstack的大资助商:

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

这种协作共赢,一起把蛋糕做大(或者说寡头独占)的开源形式,值得广大开源作者借鉴。

你有没有用过React TableReact Query呢?关于他们开展至今获得的成果与收益,你怎么看?