From b19dd8ddd4bef7e6543ec14119a517378df5353e Mon Sep 17 00:00:00 2001 From: lmhcoding <13265878974@163.com> Date: Sun, 20 Sep 2020 13:39:13 +0800 Subject: [PATCH] feat: add useLifecycles --- src/index.ts | 1 + src/useLifecycles.ts | 12 ++++++++++++ tests/useLifecycles.test.ts | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 src/useLifecycles.ts create mode 100644 tests/useLifecycles.test.ts 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) + }) +})