跳至主要內容

後座力 0.2

·4 分鐘閱讀時間

我們很榮幸宣布 Recoil 0.2.0 版本已發布。此版本有一個更可靠的非同步選擇器新實作、大幅改善效能以及許多錯誤修正和改進。

更好的非同步選擇器

我們重新實作選擇器以修正許多我們之前未處理的邊界狀況。例如

  • 選擇器現在可以在其非同步執行中的任何一點新增依賴關係。
  • 如果他們的依賴關係在其等待某件事件時發生變更,選擇器現在會重新開始。
  • 鑽石型依賴關係模式現在只會重新執行必要的選擇器。

這些只是一些只在新的實作中通過的單元測試。現在您在 Recoil 中使用非同步選擇器時不太可能遇到不正確的行為。

許多已修正的錯誤都體現為選擇器的不必要執行。在一個大量的使用非同步選擇器的應用程式中,我們觀察到選擇器執行次數總共減少了 15%。

Christian Santos (@csantos42) 已非常勤奮地處理這件事,我們很榮幸今天發布它。

縮放到大量原子

Recoil 現在使用 特殊資料結構 來維持大量原子的效率。在使用 10,000 個原子時,它現在快了數百倍。

Recoil 現在有商標了。感謝 Gray Pegg (@graypegg) 設計,以及美化我們網站!

其他改進

  • waitForAny() 的錯誤處理已變更:您現在可以存取與其參數相對應的個別 Loadable,即使其中一個處於錯誤狀態。這與 waitForNone() 更一致。
  • 新增一個類似於 Promise.allSettledwaitForAllSettled() 輔助程式。
  • 更友善的錯誤訊息,用於 useRecoilCallback() 的錯誤使用。(#870)
  • 更友善的錯誤訊息,如果您嘗試將非同步函式用作選擇器設定程式,這不受支援。(#777)
  • 優化 React 原生支援。(#748, #702)
  • 新增一個 useGetRecoilValueInfo_UNSTABLE() 掛勾,供開發人員工具使用。(#713, #714)

錯誤修正

  • 選擇器現在會將任何拋出的非 Promise 物件視為錯誤,而不再僅限於 Error 的執行個體。
  • <RecoilRoot> 有時候可能會在解除安裝後更新其狀態。(#917)
  • React 實驗版本中不會顯示遺失 <RecoilRoot> 的錯誤訊息。(#712)
  • 不再凍結錯誤。(#852)
  • 原子效果在特定情況下可能無法初始化原子(#775).
  • 非同步選擇器會在多個 React 根目錄下失敗。
  • IE 11 相容性(#894 及更多)

重大變更

如同上述所提,waitForAny() 的行為已變更。如果您依賴 waitForAny() 在其任何參數處於錯誤狀態時會產生錯誤狀態的行為,則您的程式碼將會中斷。現在它會針對每個參數傳回個別的 Loadable,就像非錯誤狀態一樣,而且您可以檢查每個參數的錯誤。

如果您在選擇器中拋出不是 Promise 也不是 Error 的東西,現在會將選擇器設定為錯誤狀態,而不是將拋出的物件視為值。

未來動態

我們即將發佈記憶體管理功能,這將允許 Recoil 自動刪除不再使用的 atom 和選擇器,且每個 atom 都可自訂設定。這項功能也會包含可供選擇器的 LRU 快取。這些新功能已於 Facebook 內部使用,但需要對 API 稍作不向下相容的變更。因此,我們的下一個版本將在您的程式碼會中斷的情況下發出警告。所需的變更並不容易,也相當罕見:從數千個匯入 Recoil 的模組中,我們發現只有不到六個需要更動。