從一個開源專案到龐大的開源矩陣,他是怎麼做到的?
大家好,我卡頌。
很多開源作者都經歷過如下過程:
-
有個好的開源點子
-
擼起袖子加油幹
-
開源專案獲得社群認可,
star
數量就是自己的動力 -
隨著維護時間變長,遇到挫折(時間上的消耗、伸手黨的不理解...)
-
心灰意冷,逐漸停止維護
今天要介紹的主人公
「Tanner Linsley」是
React Table
與
React Query
的作者。
Tanner Linsley
不同於其他開源作者在激情散去後專案逐漸荒廢, 「Tanner Linsley」不僅持續迭代專案,而且隨著維護的專案越來越多,甚至形成了專案矩陣。
上面提到的
React Table
、
React Query
,再加上其他四個專案已經合併到
TanStack
專案下,形成了統一的品牌(
TanStack
):
他是如何做到的?本文來聊聊 「Tanner Linsley」的開源之路。
開源的收益
談到 「開源」,大家會想到很多標籤 —— 「免費」、 「用愛發電」、 「貢獻」......
但事實上,任何工作如果沒有穩定的物質收益(對,說的就是錢),都是很難持續的。
傳統意義上,開源作者主要依靠 「贊助」(比如 Github Sponsor [1])。
相比開源的工作量, 「贊助」通常是杯水車薪。所以開源作者很難擴大自己維護專案的規模。
「Tanner」在 Github Sponsor [2]已經擁有180個贊助者,算很不錯的了。
Tanner的贊助者
但從 「擴大維護專案的規模」角度看,還遠遠不夠。
那麼是什麼使得 「Tanner」有穩定的收益,從而維護更多專案呢?
答案是:課程。
TanStack
矩陣中的
TanStack Query
(即
React Query
)的
官方課程
[3]已經售出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 Table
的
star
越來越多,
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 Table
或
React Query
呢?對於他們發展至今取得的成績與收益,你怎麼看?
參考資料
Github Sponsor:
[2]Github Sponsor: /tannerlinsley
[3]官方課程:
https://ui.dev/react-query?from=tanstack#pricing-plans
來自 “ 魔術師卡頌 ”, 原文作者:卡頌;原文連結:https://mp.weixin.qq.com/s/14CSynG6oZas3pZdoUcgoA,如有侵權,請聯絡管理員刪除。
相關文章
- 一個檔案的開源專案,開啟你的開源之旅
- 怎樣做好一個開源專案
- 怎麼寫開源專案的README
- PlantUML 是繪製 uml 的一個開源專案
- 我是如何把 GitHub 開源專案做到 5300+ star 的Github
- Hi,我是ChunJun,一個有趣好用的開源專案
- 一個在校大學生的開源之路:從0到1024
- 企業開源指南:建立一個開源專案
- 你熟知的開源專案,幕後推手竟然是他們?
- 企業開源指南:啟動一個開源專案
- 開源專案推薦:提高研發效率的5個開源專案
- 維護一個開源專案25年是什麼體驗?
- 開源一個功能完整的SpringBoot專案框架Spring Boot框架
- 大模型開源專案大模型
- 24 個很棒的開源 Rust 專案Rust
- 一個令人驚豔的ChatGPT專案,開源了!ChatGPT
- 我們在開源專案中是怎樣埋彩蛋的
- 從一個優秀開源專案來談前端架構前端架構
- 這個原始碼是開源的麼原始碼
- 推薦一個.Ner Core開發的配置中心開源專案
- 兩大開源平臺、九個捐贈專案,走進百度開源的2020
- 如何去參與一個開源專案
- 我寫了一個開源專案AlphabetPyAlphabet
- 如何為你的開源專案釋出一個版本
- 我的第一個開源專案 Kiwis2 MockserverMockServer
- 給你的開源專案加一個綬帶吧
- 什麼是矩陣式專案管理?矩陣專案管理
- 推薦一個.Net Core開發的Websocket群聊、私聊的開源專案Web
- [開源專案] 基於 laravel 開發的一個 社群/社交 小程式Laravel
- [譯]過去一個月最 ? 的 10 個 Swift 開源專案Swift
- 推薦幾個優秀的開源的專案
- 20 個值得學習的 Vue 開源專案Vue
- 接私活必備的 10 個開源專案!
- 15個很有趣的開源專案推薦
- 開源兩個spring api專案SpringAPI
- 分享個 golang 開源小專案Golang
- 不要讓你的開源專案「裸奔」,一文了解開源證書
- 一個優秀的Android開源框架學習專案ForgetSkyWanAndroidAndroid框架NaN