欢迎来到 Recoil 0.1.1 版本! 此版本改进了性能,并引入了几个实验性功能,例如对 React Native 的支持,在 React 之外使用快照,以及用于管理原子副作用(如日志记录、与外部存储同步、持久化等)的原子效果。
此外,现在可以通过 nightly
分支获得夜间构建。
性能
对 Recoil 性能进行的若干改进
- 在
useRecoilCallback()
期间执行的更新现在被批处理,这避免了复制数据结构或对中间状态执行更新。 这使得在一个循环中设置 5,000 个原子从 10 秒 -> 25 毫秒(在我们的一些压力测试中)。 (@davidmccabe) - 如果选择器的依赖关系没有发生变化,Recoil 现在还会避免在缓存中查找选择器值。 这使得某些具有复杂数据流图的应用程序的性能提升了 30-40 倍。 (@davidmccabe)
React Native (实验性)
Recoil 现在应该可以与 React Native 环境一起使用。 但是,与服务器端渲染类似,它并不正式支持。 (#114 - @jacques-blom,@mondaychen)
原子效果 (实验性)
原子效果 简化了对原子副作用策略的管理,作为 atom()
或 atomFamily()
定义的一部分,在每个原子基础上进行管理。 效果可用于一些有趣的应用,例如 日志记录 以及与外部存储(如 远程数据库、本地存储、浏览器 URL 历史记录等)的状态同步或持久化。 例如,您可以使用原子作为某些用户状态的本地副本,并提供一个效果来订阅服务器上的更改,以更新本地副本,并使本地更改写入并更新服务器。 (#680,#380,#381,#384,#385,#448,#449,#412,#591,#634,#682— @drarmstr,@csantos4242)
用于测试的快照 (实验性)
现在可以在 React 上下文之外构建快照。 这对于测试 或在 React 上下文之外评估选择器很有用。 (#649— @drarmstr,@habond)
错误修复
- 此更新对测试和基础设施进行了各种错误修复。 (#555,#587,#588,#590,#635,#631,#683,#684,#686— @aaronabramov,@mondaychen,@drarmstr,@mallchel,@davidmccabe,@csantos4242)
- 不要冻结不应该冻结的对象。 (#597,#633,#672— @RinGoku,@a-sane)
Snapshot
的 TypeScript 类型。 (#687— @kevinfrei,@drarmstr,@habond)- 对
waitForAll()
并发性的额外测试。 (#681— @drarmstr)
未来工作
在将来的版本中,Recoil 将自动释放不再使用的原子和选择器使用的内存,并且在原子数量较多时将表现得更好。 (@davidmccabe)
发布我们的原型 Chrome 开发者工具。 (@maxijb)
针对常见状态持久化(如浏览器本地存储或 URL 历史记录)的效果库。 (@bezi)
感谢您对 Recoil 的持续关注!