lruMemoize
这是一个使用提供的等价性检查函数来比较其输入的记忆化函数。这最初被称为 defaultMemoize
,并且在4.x版本之前是createSelector
的默认设置。
它的默认缓存大小为1。这意味着当参数的值发生变化时,它总是会重新计算。然而,可以根据需要使用特定的最大缓存大小进行自定义(自4.1.0版本以来)。
它通过调用 equalityCheck
函数来判断参数是否发生了变化。由于 lruMemoize
设计用于处理不可变数据,因此默认的 equalityCheck
函数使用引用等价性来检查变化:
- TypeScript
- JavaScript
lruMemoize/referenceEqualityCheck.ts
const referenceEqualityCheck = (previousValue: any, currentValue: any) => {
return previousValue === currentValue
}
lruMemoize/referenceEqualityCheck.js
const referenceEqualityCheck = (previousValue, currentValue) => {
return previousValue === currentValue
}
参数
名称 | 描述 |
---|---|
func | 需要被记忆化的函数。 |
equalityCheckOrOptions | 一个等式检查函数或者一个options 对象。 |
从4.1.0版本开始,lruMemoize
也接受一个选项对象作为其第一个参数,而不是一个equalityCheck
函数。options
对象可能包含:
type EqualityFn<T = any> = (a: T, b: T) => boolean
interface LruMemoizeOptions<Result = any> {
equalityCheck?: EqualityFn
resultEqualityCheck?: EqualityFn<Result>
maxSize?: number
}
名称 | 描述 |
---|---|
equalityCheck | 用于比较提供的计算函数的各个参数。默认值 = defaultEqualityCheck |
resultEqualityCheck | 如果提供,用于将新生成的输出值与缓存中的旧值进行比较。如果找到匹配,将返回旧值。这解决了常见的todos.map(todo => todo.id) 用例,其中原始数据中的其他字段的更新由于引用的改变而导致重新计算,但输出仍然有效地相同。 |
maxSize | 选择器的缓存大小。如果大于1,选择器将内部使用LRU缓存。默认值 = 1 |
注意
如果在argsMemoizeOptions
中使用resultEqualityCheck
,它将不起作用。
返回值
一个带有.clearCache()
方法的记忆化函数。