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增强
- 由于容易引发运行时错误,移除了createStructuredSelector的第二个重载。
其他功能
- 在Output Selector Fields中添加了dependencyRecomputations和resetDependencyRecomputations。这些新增功能提供了对input selectors更大的控制和洞察力,补充了新的argsMemoizeAPI。
- 引入了inputStabilityCheck,这是一个开发工具,它使用相同的参数运行input selectors两次,并在它们对同一调用返回不同结果时触发警告。
- 引入了identityFunctionCheck,这是一个开发工具,用于检查result function是否是Identity Function。
这些更新旨在增强灵活性、性能和开发者体验。有关每个特性的详细使用和示例,请参考每个特性的更新文档部分。
破坏性变更
- 将createSelector使用的默认记忆函数切换为weakMapMemoize。
- 将defaultMemoize重命名为lruMemoize,因为它不再是传递给createSelector的默认记忆 函数。
- 将defaultEqualityCheck重命名为referenceEqualityCheck。
- 将DefaultMemoizeOptions重命名为LruMemoizeOptions。
- 移除了ParametricSelector和OutputParametricSelector类型。它们的功能现在已集成到Selector和OutputSelector中,这些类型本身支持额外的参数。