Skip to content

Instantly share code, notes, and snippets.

@nstadigs
Last active June 20, 2018 15:28
Show Gist options
  • Save nstadigs/a48d917517d4181acb8d to your computer and use it in GitHub Desktop.
Save nstadigs/a48d917517d4181acb8d to your computer and use it in GitHub Desktop.
recompose memoize function
import mapValues from 'lodash/object/mapValues';
import every from 'lodash/collection/every';
const sortUsersByKey (users, key) => {
//...
};
const upperCaseNames (users) => {
// ...
};
OptimizedSortedUserList = useMemoizedLib({
sortUsersByKey: sortUsersByKey,
upperCaseNames: upperCaseNames
}, ({lib, users, key}) => {
const transformedUsers = lib.upperCaseNames(users);
const sortedUsers = lib.sortUsersByKey(transformedUsers, key);
return <UserList users={sortedUsers} />
});
// Impl:
const areArraysShallowEqual = (arr1, arr2) => {
if (args.length !== lastArgs.length) {
return false;
}
return every(arr1, (val, index) => val === arr2[index]);
};
const memoizeLast = (fn) => {
let lastArgs = [];
let lastResult = null;
return (...args) => {
if (areArraysShallowEqual(args, lastArgs)) {
return lastResult;
}
lastArgs = args;
lastResult = fn.apply(undefined, args);
return lastResult;
};
};
const memoizeFunctions = (functionsToMemoize, BaseComponent) => {
return class extends React.Component {
constructor(props, context) {
super(props, context);
this._memoizedFunctions = mapValues(functionsToMemoize, (fn) => memoizeLast(fn));
},
render() {
return <BaseComponent lib={this._memoizedFunctions} {...this.props} />;
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment