跳到主要内容

5.0.0版本有什么新特性?

5.0.0版本引入了一些新的特性和改进:

定制增强

  • 新增了向createSelectorCreator传递选项对象的能力,允许定制memoizeargsMemoize函数,以及它们各自的选项(memoizeOptionsargsMemoizeOptions)。
  • createSelector函数现在支持在其选项对象中直接定制memoizeargsMemoize

记忆函数

  • 引入了新的实验性记忆函数:weakMapMemoizeunstable_autotrackMemoize
  • memoizeargsMemoize集成到Output Selector Fields中,用于调试目的。

TypeScript支持和性能

  • 停止支持TypeScript 4.7以下的版本,以符合现代TypeScript特性。
  • 显著提高了嵌套output selectors的TypeScript性能。嵌套限制从大约8增加到大约30个output selectors,大大减少了出现臭名昭著的Type instantiation is excessively deep and possibly infinite错误的次数。

选择器API增强

其他功能

  • Output Selector Fields中添加了dependencyRecomputationsresetDependencyRecomputations。这些新增功能提供了对input selectors更大的控制和洞察力,补充了新的argsMemoize API。
  • 引入了inputStabilityCheck,这是一个开发工具,它使用相同的参数运行input selectors两次,并在它们对同一调用返回不同结果时触发警告。
  • 引入了identityFunctionCheck,这是一个开发工具,用于检查result function是否是Identity Function

这些更新旨在增强灵活性、性能和开发者体验。有关每个特性的详细使用和示例,请参考每个特性的更新文档部分。

破坏性变更

  • createSelector使用的默认记忆函数切换为weakMapMemoize
  • defaultMemoize重命名为lruMemoize,因为它不再是传递给createSelector的默认记忆函数。
  • defaultEqualityCheck重命名为referenceEqualityCheck
  • DefaultMemoizeOptions重命名为LruMemoizeOptions
  • 移除了ParametricSelectorOutputParametricSelector类型。它们的功能现在已集成到SelectorOutputSelector中,这些类型本身支持额外的参数。