在這篇文章中,我想分享 Zustand 的發展背後的故事。確切地說,我不是 Zustand 的原始作者,當 Zustand v0 誕生時,我正在開發其他全域狀態庫,尤其是 React-Tracked。順便說一句,我現在認為自己是 Zustand 的(第二)作者。
我發現我的推文提到了 Zustand,並將其與其他庫(包括我的庫)進行了比較。
當時我的信念是全域狀態應該透過 React Context 傳遞,以便它可以與 React 並發模式一起工作。因此,我製作了一個比較表來區分我的圖書館和其他圖書館,Zustand 是其中之一。這是2019年的事。
2020年,我加入了Poimandres團隊並接管了Zustand的開發。當時我的興趣是讓全域狀態庫與 React 並發模式一起運作。不可能從並發模式中獲得全部好處,但是有一個名為 useMutableSource 的實驗性 API 可以使全域狀態與並發模式相容。
我正在嘗試使用基於 React Context 的解決方案和 React-Tracked 進行許多事情,並且想知道在沒有 React Context 的情況下我們可以用全域狀態做什麼。 Zustand 已經一年了,但沒有人維護它。所以我決定接手。
實驗性的 useMutableSource API 還沒準備好,所以第一個任務是更新各種內容並修復一些錯誤。這就是 Zustand v3 誕生的時候。我的希望是很快就會發布帶有 useMutableSource 的 v4,但它沒有發生。這背後還有一個故事。
如今,將全域狀態置於外部並可選擇使用 React Context 來傳遞其儲存是一種眾所周知的模式。 Zustand 是這種模式的先驅。人們對 React Context 中沒有全域狀態非常懷疑,我們很難解釋這是一個有效的模式。
我對 Zustand 關心的事情之一是它的簡單實現和它的小包大小。如果你查看原始程式碼,你會發現它只不過是使用 React hooks 和最小的 store 實作。
截至撰寫本文時,Zustand v4 是最新版本,它具有非常先進的 TypeScript 支持,並且程式碼幾乎完全從 v3 重寫。我們的 Zustand v5 已經準備好迎接下一個版本了。
最後但並非最不重要的一點是,有幾個貢獻者維護這個專案。我接手這個專案的時候沒想到會發生這樣的事情。我對此非常感激。謝謝大家。 <script> // Detect dark theme var iframe = document.getElementById('tweet-1141004414129324032-562'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1141004414129324032&theme=dark" } </script>
以上是Zustand是如何誕生的的詳細內容。更多資訊請關注PHP中文網其他相關文章!