跳到主要內容

Recoil 0.3

·閱讀時間 2 分鐘

我們很榮幸宣布 Recoil 0.3 已釋出,具備更彈性的 RecoilRoot 巢狀結構、回呼產生器、記憶體管理準備、最佳化和錯誤修復。

新功能

  • 您現在可以建立一個 RecoilRoot,如果周遭存在根,它會透過周遭根運作。這讓您可以建立可重複使用的元件,這些元件可以使用 Recoil,但可以在更大的 Recoil 應用程式內或外使用。(#973
  • 您現在可以從選擇器傳回 Recoil 回呼。(#989

重大變更:準備記憶體管理

下一個版本的 Recoil 將會產生重大 API 變更。如果您有需要更新的程式碼,今日釋出的版本會在開發組建中發出主控台警告。大多數應用程式不需要任何程式碼變更。

當我們發布記憶體管理時,快照(例如您在 useRecoilCallback() 中得到的快照)只在建立它的刻度中有效。如果您想要保留一個快照一段較長的時間,您需要手動保留它,然後再解除保留。

const release = snapshot.retain();
try {
await someAsyncWork(snapshot);
} finally {
release();
}

在 0.3.0 中,如果您使用了一個未被保留的快照,您將會在開發中看到主控台警告。這並未改變製作環境中的行為。在下一版本中,無論是在開發或製作環境中,這將會引發一個例外。

盡可能避免保留快照,因為只要保留該快照,便無法回收所有原子中的記憶體。相反地,在切換到非同步之前,擷取您需要的數值即可。

錯誤修正、效能和其他改進

  • 使用 atomFamily 時減少開銷。使用數千個原子的一個應用程式降低了 200MB 的記憶體使用量。
  • 修正非同步選擇器拋出錯誤卻未由 React 錯誤界線捕捉到的錯誤。(#998, #1017)
  • setSelf() 初始化 Promise 或從同一個 onSet() 處理常式觸發實驗性原子效果 onSet() 時,不再呼叫該函式。(#974, #979, #953, #986)
  • 改善 Safari 支援。(#967, #609)
  • 在開發模式儲存在選擇器中的數值現已凍結。(#911)
  • 改善對 Loadables 的 TypeScript 支援。