跳至主要内容

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)
  • 实验性原子效果 onSet() 现在不再从 setSelf() 初始化为 Promise 或从同一个 onSet() 处理程序触发时被调用。(#974, #979, #953, #986)
  • 改进对 Safari 的支持。(#967, #609)
  • 现在在开发模式下存储在选择器中的值被冻结。(#911)
  • 改进 Loadable 的 TypeScript 支持。