mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-04-26 13:35:32 +08:00
34 lines
752 B
TypeScript
34 lines
752 B
TypeScript
export default function memoize<Result, Deps extends ReadonlyArray<any>>(
|
|
callback: (...deps: Deps) => Result
|
|
) {
|
|
let previous: Deps | undefined;
|
|
let result: Result | undefined;
|
|
|
|
return (...dependencies: Deps): Result => {
|
|
let hasChanged = false;
|
|
|
|
if (previous) {
|
|
if (previous.length !== dependencies.length) {
|
|
hasChanged = true;
|
|
} else {
|
|
for (let i = 0; i < previous.length; i++) {
|
|
if (previous[i] !== dependencies[i]) {
|
|
hasChanged = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
hasChanged = true;
|
|
}
|
|
|
|
previous = dependencies;
|
|
|
|
if (hasChanged || result === undefined) {
|
|
result = callback(...dependencies);
|
|
}
|
|
|
|
return result;
|
|
};
|
|
}
|