diff --git a/src/index.ts b/src/index.ts index 53cc7fb..944ce5e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,3 +10,4 @@ export * from './useBoolean' export * from './useStorage' export * from './useLocalStorage' export * from './useStorage' +export * from './useLifecycles' diff --git a/src/useLifecycles.ts b/src/useLifecycles.ts new file mode 100644 index 0000000..d80f84a --- /dev/null +++ b/src/useLifecycles.ts @@ -0,0 +1,12 @@ +import { getCurrentInstance, onMounted, onUnmounted } from 'vue' + +interface Callback { + (): any +} + +export function useLifecycles(mountedCb: Callback, unmountCb: Callback): void { + if (getCurrentInstance()) { + mountedCb && onMounted(mountedCb) + unmountCb && onUnmounted(unmountCb) + } +} diff --git a/tests/useLifecycles.test.ts b/tests/useLifecycles.test.ts new file mode 100644 index 0000000..b73825e --- /dev/null +++ b/tests/useLifecycles.test.ts @@ -0,0 +1,18 @@ +import { mount } from '@vue/test-utils' +import { useLifecycles } from '../src/useLifecycles' + +describe('test useLifecycles', () => { + test('callback should be called when mounted or unmounted', () => { + const onMounted = jest.fn() + const onUnmounted = jest.fn() + const wrapper = mount({ + template: '
test
', + setup () { + useLifecycles(onMounted, onUnmounted) + } + }) + expect(onMounted).toHaveBeenCalledTimes(1) + wrapper.unmount() + expect(onUnmounted).toHaveBeenCalledTimes(1) + }) +})