@tarojs/components
Version:
Taro 组件库。
38 lines (35 loc) • 928 B
JavaScript
// https://github.com/alexreardon/memoize-one#readme
function areInputsEqual (newInputs, lastInputs) {
if (newInputs.length !== lastInputs.length) {
return false
}
for (let i = 0; i < newInputs.length; i++) {
if (newInputs[i] !== lastInputs[i]) {
return false
}
}
return true
}
export function memoizeOne (resultFn, isEqual) {
// eslint-disable-next-line no-void
if (isEqual === void 0) { isEqual = areInputsEqual }
let lastThis
let lastArgs = []
let lastResult
let calledOnce = false
function memoized () {
const newArgs = []
for (let _i = 0; _i < arguments.length; _i++) {
newArgs[_i] = arguments[_i]
}
if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {
return lastResult
}
lastResult = resultFn.apply(this, newArgs)
calledOnce = true
lastThis = this
lastArgs = newArgs
return lastResult
}
return memoized
}