diff --git a/packages/vue/src/composables/useRenderCount/index.test.ts b/packages/vue/src/composables/useRenderCount/index.test.ts index 8fe517f..93b8ace 100644 --- a/packages/vue/src/composables/useRenderCount/index.test.ts +++ b/packages/vue/src/composables/useRenderCount/index.test.ts @@ -32,7 +32,7 @@ describe('useRenderCount', () => { await nextTick(); // Will trigger a render - expect(component.vm.count).toBe(2); + expect(component.vm.count).toBe(1); expect(component.text()).toBe('1'); component.vm.visibleCount++; @@ -40,7 +40,7 @@ describe('useRenderCount', () => { await nextTick(); // Will trigger a single render for both updates - expect(component.vm.count).toBe(3); + expect(component.vm.count).toBe(2); expect(component.text()).toBe('3'); }); @@ -70,6 +70,6 @@ describe('useRenderCount', () => { await nextTick(); // Will trigger a single render for both updates - expect(count.value).toBe(2); + expect(count.value).toBe(1); }); }); \ No newline at end of file diff --git a/packages/vue/src/composables/useRenderCount/index.ts b/packages/vue/src/composables/useRenderCount/index.ts index d40737b..1037271 100644 --- a/packages/vue/src/composables/useRenderCount/index.ts +++ b/packages/vue/src/composables/useRenderCount/index.ts @@ -1,6 +1,7 @@ import { onMounted, onUpdated, readonly, type ComponentInternalInstance } from 'vue'; import { useCounter } from '../useCounter'; import { getLifeCycleTarger } from '../..'; +import { SyncMutex } from '@robonen/stdlib'; /** * @name useRenderCount @@ -19,11 +20,22 @@ import { getLifeCycleTarger } from '../..'; * @since 0.0.1 */ export function useRenderCount(instance?: ComponentInternalInstance) { + const mutex = new SyncMutex(); const { count, increment } = useCounter(0); const target = getLifeCycleTarger(instance); - onMounted(increment, target); - onUpdated(increment, target); + const incrementEffect = () => { + if (mutex.isLocked) { + mutex.unlock(); + return; + } + + mutex.lock(); + increment(); + }; + + onMounted(incrementEffect, target); + onUpdated(incrementEffect, target); return readonly(count); } \ No newline at end of file