Skip to content

Commit 3368da4

Browse files
committed
feat: usemount support destructor
1 parent c7bb04c commit 3368da4

File tree

5 files changed

+22
-11
lines changed

5 files changed

+22
-11
lines changed

packages/hooks/src/useMount/__tests__/index.test.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,22 @@ import useMount from '../index';
33

44
describe('useMount', () => {
55
it('test mount', async () => {
6+
const destructor = jest.fn();
67
const fn = jest.fn();
8+
fn.mockReturnValue(destructor);
79
const hook = renderHook(() => useMount(fn));
8-
expect(fn).toBeCalledTimes(1);
10+
expect(fn).toHaveBeenCalledTimes(1);
11+
expect(destructor).toHaveBeenCalledTimes(0);
912
hook.rerender();
10-
expect(fn).toBeCalledTimes(1);
13+
expect(fn).toHaveBeenCalledTimes(1);
14+
expect(destructor).toHaveBeenCalledTimes(0);
1115
hook.unmount();
12-
expect(fn).toBeCalledTimes(1);
16+
expect(fn).toHaveBeenCalledTimes(1);
17+
expect(destructor).toHaveBeenCalledTimes(1);
1318

1419
renderHook(() => useMount(fn)).unmount();
15-
expect(fn).toBeCalledTimes(2);
20+
expect(fn).toHaveBeenCalledTimes(2);
21+
expect(destructor).toHaveBeenCalledTimes(2);
1622
});
1723

1824
// it('should output error when fn is not a function', () => {

packages/hooks/src/useMount/demo/demo1.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ import React from 'react';
1313
const MyComponent = () => {
1414
useMount(() => {
1515
message.info('mount');
16+
17+
return () => {
18+
message.info('unmount');
19+
};
1620
});
1721

1822
return <div>Hello World</div>;
@@ -23,7 +27,7 @@ export default () => {
2327

2428
return (
2529
<>
26-
<button type="button" onClick={toggle}>
30+
<button type='button' onClick={toggle}>
2731
{state ? 'unmount' : 'mount'}
2832
</button>
2933
{state && <MyComponent />}

packages/hooks/src/useMount/index.en-US.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ A hook that executes a function after the component is mounted.
1616
## API
1717

1818
```typescript
19-
useMount(fn: () => void);
19+
useMount(fn: EffectCallback);
2020
```
2121

2222
### Params
2323

2424
| Property | Description | Type | Default |
2525
| -------- | --------------------------- | ------------ | ------- |
26-
| fn | The function to be executed | `() => void` | - |
26+
| fn | The function to be executed | `EffectCallback` | - |

packages/hooks/src/useMount/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { useEffect } from 'react';
2+
import { type EffectCallback } from 'react';
23
import { isFunction } from '../utils';
34
import isDev from '../utils/isDev';
45

5-
const useMount = (fn: () => void) => {
6+
const useMount = (fn: EffectCallback) => {
67
if (isDev) {
78
if (!isFunction(fn)) {
89
console.error(
@@ -12,7 +13,7 @@ const useMount = (fn: () => void) => {
1213
}
1314

1415
useEffect(() => {
15-
fn?.();
16+
return fn?.();
1617
}, []);
1718
};
1819

packages/hooks/src/useMount/index.zh-CN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ nav:
1616
## API
1717

1818
```typescript
19-
useMount(fn: () => void);
19+
useMount(fn: EffectCallback);
2020
```
2121

2222
### 参数
2323

2424
| 参数 | 说明 | 类型 | 默认值 |
2525
| ---- | ------------------ | ------------ | ------ |
26-
| fn | 初始化时执行的函数 | `() => void` | - |
26+
| fn | 初始化时执行的函数 | `EffectCallback` | - |

0 commit comments

Comments
 (0)