UNPKG

set-state-compare

Version:

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

23 lines 3.16 kB
import { simpleObjectValuesDifferent } from "./diff-utils.js"; /** * @param {any} component * @param {Record<string, any>} nextProps * @param {Record<string, any>} [nextState] * @returns {boolean} Whether the component should update or not. True means it should update. False means it should not update. */ export default function shouldComponentUpdate(component, nextProps, nextState) { if (Object.keys(nextProps).length != Object.keys(component.props).length) { return true; } if (component.state && Object.keys(nextState).length != Object.keys(component.state).length) { return true; } if (simpleObjectValuesDifferent(nextProps, component.props)) { return true; } if (nextState && !component.state) { return true; } return simpleObjectValuesDifferent(nextState, component.state); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdWxkLWNvbXBvbmVudC11cGRhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2hvdWxkLWNvbXBvbmVudC11cGRhdGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFFM0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUztJQUMzRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pFLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1RixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxJQUFJLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxJQUFJLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7c2ltcGxlT2JqZWN0VmFsdWVzRGlmZmVyZW50fSBmcm9tIFwiLi9kaWZmLXV0aWxzLmpzXCJcblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gY29tcG9uZW50XG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG5leHRQcm9wc1xuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbbmV4dFN0YXRlXVxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlIG9yIG5vdC4gVHJ1ZSBtZWFucyBpdCBzaG91bGQgdXBkYXRlLiBGYWxzZSBtZWFucyBpdCBzaG91bGQgbm90IHVwZGF0ZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKGNvbXBvbmVudCwgbmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgaWYgKE9iamVjdC5rZXlzKG5leHRQcm9wcykubGVuZ3RoICE9IE9iamVjdC5rZXlzKGNvbXBvbmVudC5wcm9wcykubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmIChjb21wb25lbnQuc3RhdGUgJiYgT2JqZWN0LmtleXMobmV4dFN0YXRlKS5sZW5ndGggIT0gT2JqZWN0LmtleXMoY29tcG9uZW50LnN0YXRlKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHNpbXBsZU9iamVjdFZhbHVlc0RpZmZlcmVudChuZXh0UHJvcHMsIGNvbXBvbmVudC5wcm9wcykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKG5leHRTdGF0ZSAmJiAhY29tcG9uZW50LnN0YXRlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHJldHVybiBzaW1wbGVPYmplY3RWYWx1ZXNEaWZmZXJlbnQobmV4dFN0YXRlLCBjb21wb25lbnQuc3RhdGUpXG59XG4iXX0=