跳到主要内容

5.0.0版本有什么新特性?

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

定制增强​

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

记忆函数​

  • 引入了新的实验性记忆函数:weakMapMemoize和unstable_autotrackMemoize。
  • 将memoize和argsMemoize集成到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中添加了dependencyRecomputations和resetDependencyRecomputations。这些新增功能提供了对input selectors更大的控制和洞察力,补充了新的argsMemoize API。
  • 引入了inputStabilityCheck,这是一个开发工具,它使用相同的参数运行input selectors两次,并在它们对同一调用返回不同结果时触发警告。
  • 引入了identityFunctionCheck,这是一个开发工具,用于检查result function是否是Identity Function。

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

破坏性变更​

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