set-state-compare
Version:
setState for React that compares with the current state and only sets the state if changed.
56 lines • 6.61 kB
JavaScript
if (!globalThis.setStateCompareData) {
globalThis.setStateCompareData = {
rendering: 0,
renderingCallbacks: [],
afterPaintCallbacks: [],
afterPaintHandle: undefined
};
}
const shared = globalThis.setStateCompareData;
if (!shared.afterPaintCallbacks) {
shared.afterPaintCallbacks = [];
}
if (!("afterPaintHandle" in shared)) {
shared.afterPaintHandle = undefined;
}
if (!shared.renderingCallbacks) {
shared.renderingCallbacks = [];
}
if (!shared.scheduleAfterPaint) {
shared.scheduleAfterPaint = (callback) => {
shared.afterPaintCallbacks.push(callback);
if (shared.afterPaintHandle !== undefined) {
return shared.afterPaintHandle;
}
const schedule = globalThis.requestAnimationFrame || ((next) => setTimeout(next, 0));
shared.afterPaintHandle = schedule(() => {
const callbacks = shared.afterPaintCallbacks;
shared.afterPaintHandle = undefined;
shared.afterPaintCallbacks = [];
for (const queuedCallback of callbacks) {
queuedCallback();
}
});
return shared.afterPaintHandle;
};
}
if (!shared.flushRenderingCallbacks) {
shared.flushRenderingCallbacks = () => {
if (shared.renderingCallbacks.length === 0) {
return;
}
const callbacks = shared.renderingCallbacks;
shared.renderingCallbacks = [];
for (const queuedCallback of callbacks) {
queuedCallback();
}
};
}
if (!shared.enqueueRenderCallback) {
shared.enqueueRenderCallback = (callback) => {
shared.renderingCallbacks.push(callback);
shared.scheduleAfterPaint(shared.flushRenderingCallbacks);
};
}
export default shared;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsVUFBVSxDQUFDLG1CQUFtQixHQUFHO1FBQy9CLFNBQVMsRUFBRSxDQUFDO1FBQ1osa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixtQkFBbUIsRUFBRSxFQUFFO1FBQ3ZCLGdCQUFnQixFQUFFLFNBQVM7S0FDNUIsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUE7QUFFN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7QUFDakMsQ0FBQztBQUVELElBQUksQ0FBQyxDQUFDLGtCQUFrQixJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDcEMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUE7QUFDaEMsQ0FBQztBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUMvQixNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtRQUN2QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXpDLElBQUksTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFBO1FBQ2hDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FDWixVQUFVLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRXJFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQTtZQUU1QyxNQUFNLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFBO1lBQ25DLE1BQU0sQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUE7WUFFL0IsS0FBSyxNQUFNLGNBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDdkMsY0FBYyxFQUFFLENBQUE7WUFDbEIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUE7SUFDaEMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNwQyxNQUFNLENBQUMsdUJBQXVCLEdBQUcsR0FBRyxFQUFFO1FBQ3BDLElBQUksTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQTtRQUUzQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFBO1FBRTlCLEtBQUssTUFBTSxjQUFjLElBQUksU0FBUyxFQUFFLENBQUM7WUFDdkMsY0FBYyxFQUFFLENBQUE7UUFDbEIsQ0FBQztJQUNILENBQUMsQ0FBQTtBQUNILENBQUM7QUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDbEMsTUFBTSxDQUFDLHFCQUFxQixHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN4QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUE7SUFDM0QsQ0FBQyxDQUFBO0FBQ0gsQ0FBQztBQUVELGVBQWUsTUFBTSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKCFnbG9iYWxUaGlzLnNldFN0YXRlQ29tcGFyZURhdGEpIHtcbiAgZ2xvYmFsVGhpcy5zZXRTdGF0ZUNvbXBhcmVEYXRhID0ge1xuICAgIHJlbmRlcmluZzogMCxcbiAgICByZW5kZXJpbmdDYWxsYmFja3M6IFtdLFxuICAgIGFmdGVyUGFpbnRDYWxsYmFja3M6IFtdLFxuICAgIGFmdGVyUGFpbnRIYW5kbGU6IHVuZGVmaW5lZFxuICB9XG59XG5cbmNvbnN0IHNoYXJlZCA9IGdsb2JhbFRoaXMuc2V0U3RhdGVDb21wYXJlRGF0YVxuXG5pZiAoIXNoYXJlZC5hZnRlclBhaW50Q2FsbGJhY2tzKSB7XG4gIHNoYXJlZC5hZnRlclBhaW50Q2FsbGJhY2tzID0gW11cbn1cblxuaWYgKCEoXCJhZnRlclBhaW50SGFuZGxlXCIgaW4gc2hhcmVkKSkge1xuICBzaGFyZWQuYWZ0ZXJQYWludEhhbmRsZSA9IHVuZGVmaW5lZFxufVxuXG5pZiAoIXNoYXJlZC5yZW5kZXJpbmdDYWxsYmFja3MpIHtcbiAgc2hhcmVkLnJlbmRlcmluZ0NhbGxiYWNrcyA9IFtdXG59XG5cbmlmICghc2hhcmVkLnNjaGVkdWxlQWZ0ZXJQYWludCkge1xuICBzaGFyZWQuc2NoZWR1bGVBZnRlclBhaW50ID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgc2hhcmVkLmFmdGVyUGFpbnRDYWxsYmFja3MucHVzaChjYWxsYmFjaylcblxuICAgIGlmIChzaGFyZWQuYWZ0ZXJQYWludEhhbmRsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gc2hhcmVkLmFmdGVyUGFpbnRIYW5kbGVcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlZHVsZSA9XG4gICAgICBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCAoKG5leHQpID0+IHNldFRpbWVvdXQobmV4dCwgMCkpXG5cbiAgICBzaGFyZWQuYWZ0ZXJQYWludEhhbmRsZSA9IHNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHNoYXJlZC5hZnRlclBhaW50Q2FsbGJhY2tzXG5cbiAgICAgIHNoYXJlZC5hZnRlclBhaW50SGFuZGxlID0gdW5kZWZpbmVkXG4gICAgICBzaGFyZWQuYWZ0ZXJQYWludENhbGxiYWNrcyA9IFtdXG5cbiAgICAgIGZvciAoY29uc3QgcXVldWVkQ2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgIHF1ZXVlZENhbGxiYWNrKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIHNoYXJlZC5hZnRlclBhaW50SGFuZGxlXG4gIH1cbn1cblxuaWYgKCFzaGFyZWQuZmx1c2hSZW5kZXJpbmdDYWxsYmFja3MpIHtcbiAgc2hhcmVkLmZsdXNoUmVuZGVyaW5nQ2FsbGJhY2tzID0gKCkgPT4ge1xuICAgIGlmIChzaGFyZWQucmVuZGVyaW5nQ2FsbGJhY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY2FsbGJhY2tzID0gc2hhcmVkLnJlbmRlcmluZ0NhbGxiYWNrc1xuXG4gICAgc2hhcmVkLnJlbmRlcmluZ0NhbGxiYWNrcyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IHF1ZXVlZENhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgcXVldWVkQ2FsbGJhY2soKVxuICAgIH1cbiAgfVxufVxuXG5pZiAoIXNoYXJlZC5lbnF1ZXVlUmVuZGVyQ2FsbGJhY2spIHtcbiAgc2hhcmVkLmVucXVldWVSZW5kZXJDYWxsYmFjayA9IChjYWxsYmFjaykgPT4ge1xuICAgIHNoYXJlZC5yZW5kZXJpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICBzaGFyZWQuc2NoZWR1bGVBZnRlclBhaW50KHNoYXJlZC5mbHVzaFJlbmRlcmluZ0NhbGxiYWNrcylcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzaGFyZWRcbiJdfQ==