UNPKG

928 BJavaScriptView Raw
1// https://github.com/alexreardon/memoize-one#readme
2
3function areInputsEqual (newInputs, lastInputs) {
4 if (newInputs.length !== lastInputs.length) {
5 return false
6 }
7 for (let i = 0; i < newInputs.length; i++) {
8 if (newInputs[i] !== lastInputs[i]) {
9 return false
10 }
11 }
12 return true
13}
14
15export function memoizeOne (resultFn, isEqual) {
16 // eslint-disable-next-line no-void
17 if (isEqual === void 0) { isEqual = areInputsEqual }
18 let lastThis
19 let lastArgs = []
20 let lastResult
21 let calledOnce = false
22 function memoized () {
23 const newArgs = []
24 for (let _i = 0; _i < arguments.length; _i++) {
25 newArgs[_i] = arguments[_i]
26 }
27 if (calledOnce && lastThis === this && isEqual(newArgs, lastArgs)) {
28 return lastResult
29 }
30 lastResult = resultFn.apply(this, newArgs)
31 calledOnce = true
32 lastThis = this
33 lastArgs = newArgs
34 return lastResult
35 }
36 return memoized
37}