UNPKG

set-state-compare

Version:

setState for React that compares with the current state and only sets the state if changed.

35 lines 4.3 kB
import { simpleObjectValuesDifferent } from "./diff-utils.js"; /** * @param {Record<string, any>} prevProps * @param {Record<string, any>} nextProps * @param {boolean} [debug] * @returns {boolean} */ const memoCompareProps = (prevProps, nextProps, debug) => { if (debug) { console.log("memoCompareProps", { prevProps, nextProps }); } if (Object.keys(nextProps).length != Object.keys(prevProps).length) { if (debug) { console.log(`Keys length was different - prev ${Object.keys(prevProps).length} after ${Object.keys(nextProps).length}`); } return false; } if (debug) { console.log("Running simpleObjectValuesDifferent"); } const result = simpleObjectValuesDifferent(nextProps, prevProps, { debug }); if (debug) { console.log(`Was it different: ${result}`); } return !result; }; /** * @param {Record<string, any>} prevProps * @param {Record<string, any>} nextProps * @returns {boolean} */ const memoComparePropsWithDebug = (prevProps, nextProps) => memoCompareProps(prevProps, nextProps, true); export { memoComparePropsWithDebug }; export default memoCompareProps; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtby1jb21wYXJlLXByb3BzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21lbW8tY29tcGFyZS1wcm9wcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUUzRDs7Ozs7R0FLRztBQUNILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3ZELElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLEVBQUMsU0FBUyxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuRSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO1FBQ3pILENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQTtJQUV6RSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQU0sQ0FBQTtBQUNoQixDQUFDLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFFeEcsT0FBTyxFQUFDLHlCQUF5QixFQUFDLENBQUE7QUFDbEMsZUFBZSxnQkFBZ0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2ltcGxlT2JqZWN0VmFsdWVzRGlmZmVyZW50fSBmcm9tIFwiLi9kaWZmLXV0aWxzLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHByZXZQcm9wc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBuZXh0UHJvcHNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlYnVnXVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IG1lbW9Db21wYXJlUHJvcHMgPSAocHJldlByb3BzLCBuZXh0UHJvcHMsIGRlYnVnKSA9PiB7XG4gIGlmIChkZWJ1Zykge1xuICAgIGNvbnNvbGUubG9nKFwibWVtb0NvbXBhcmVQcm9wc1wiLCB7cHJldlByb3BzLCBuZXh0UHJvcHN9KVxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKG5leHRQcm9wcykubGVuZ3RoICE9IE9iamVjdC5rZXlzKHByZXZQcm9wcykubGVuZ3RoKSB7XG4gICAgaWYgKGRlYnVnKSB7XG4gICAgICBjb25zb2xlLmxvZyhgS2V5cyBsZW5ndGggd2FzIGRpZmZlcmVudCAtIHByZXYgJHtPYmplY3Qua2V5cyhwcmV2UHJvcHMpLmxlbmd0aH0gYWZ0ZXIgJHtPYmplY3Qua2V5cyhuZXh0UHJvcHMpLmxlbmd0aH1gKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKGRlYnVnKSB7XG4gICAgY29uc29sZS5sb2coXCJSdW5uaW5nIHNpbXBsZU9iamVjdFZhbHVlc0RpZmZlcmVudFwiKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc2ltcGxlT2JqZWN0VmFsdWVzRGlmZmVyZW50KG5leHRQcm9wcywgcHJldlByb3BzLCB7ZGVidWd9KVxuXG4gIGlmIChkZWJ1Zykge1xuICAgIGNvbnNvbGUubG9nKGBXYXMgaXQgZGlmZmVyZW50OiAke3Jlc3VsdH1gKVxuICB9XG5cbiAgcmV0dXJuICFyZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IHByZXZQcm9wc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBuZXh0UHJvcHNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBtZW1vQ29tcGFyZVByb3BzV2l0aERlYnVnID0gKHByZXZQcm9wcywgbmV4dFByb3BzKSA9PiBtZW1vQ29tcGFyZVByb3BzKHByZXZQcm9wcywgbmV4dFByb3BzLCB0cnVlKVxuXG5leHBvcnQge21lbW9Db21wYXJlUHJvcHNXaXRoRGVidWd9XG5leHBvcnQgZGVmYXVsdCBtZW1vQ29tcGFyZVByb3BzXG4iXX0=