Skip to content

Commit 3c351fb

Browse files
fix: useRequest useLoadingDelay plugin bug (#198)
* docs: update COMMIT.md and COMMIT-zh-CN.md * fix: fix useRequest useLoadingDelay plugin bug * docs: opt --------- Co-authored-by: YongGit <1013588891@qq.com>
1 parent c0afd68 commit 3c351fb

File tree

6 files changed

+83
-62
lines changed

6 files changed

+83
-62
lines changed

.github/COMMIT-zh-CN.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,18 @@
2222
feat: your commit
2323

2424
```
25+
26+
### 📌 可能存在的问题
27+
28+
如果运行 `pnpm docs:dev` 提示报错,可以尝试一下以下操作:
29+
30+
- 检查 `node` 版本: 建议使用 `node 16`, `node 18` 版本开发
31+
- 构建包后再运行: `pnpm build` 后再运行 `pnpm docs:dev`
32+
33+
```bash
34+
# 构建包
35+
pnpm build
36+
37+
# 运行文档
38+
pnpm docs:dev
39+
```

.github/COMMIT.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,18 @@
2020
feat: your commit
2121

2222
```
23+
24+
### 📌 Possible Problems
25+
26+
If running 'pnpm docs:dev' prompts an error, try the following:
27+
28+
- Check 'node' version: It is recommended to use 'node 16', 'node 18' version development
29+
- build and run: 'pnpm build and run' pnpm docs:dev '
30+
31+
```bash
32+
# build project
33+
pnpm build
34+
35+
# run docs
36+
pnpm docs:dev
37+
```
Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,27 @@
11
import { sleep } from 'test-utils/sleep'
2-
import { mount } from '@vue/test-utils'
2+
import useRequest from '../useRequest'
3+
4+
function getUsername(): Promise<string> {
5+
return new Promise(resolve => {
6+
setTimeout(() => {
7+
resolve(`vue-hooks-plus useRequest A ${new Date().getTime()}`)
8+
}, 1)
9+
})
10+
}
311

4-
import Demo from '../docs/loadingDelay/demo/demo.vue'
512

613
describe('useRequest/LoadingDelay', () => {
714
it(' should data work ', async () => {
8-
const wrapper = mount(Demo)
9-
const text = wrapper.findAll('div').at(1)
15+
const { loading, run: runData } = useRequest(() => getUsername())
16+
const { loading: loading1, run: runData1 } = useRequest(() => getUsername(), {
17+
loadingDelay: 300,
18+
})
19+
runData()
20+
runData1()
21+
await sleep(10)
22+
expect(loading.value).toBe(false)
23+
expect(loading1.value).toBe(true)
1024

11-
expect(text?.text()).toBe('Username:')
12-
await sleep(301)
13-
expect(text?.text()).toBe('Username:loading...')
1425

15-
await sleep(1000)
16-
expect(text?.text()).toBe('Username:vue-hooks-plus useRequest A')
1726
})
1827
})

packages/hooks/src/useRequest/__tests__/polling.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('polling', () => {
3232
result.run()
3333
expect(result.loading.value).toBeTruthy()
3434
expect(result.data?.value).toBeUndefined()
35-
await sleep(1000)
35+
await sleep(1050)
3636
expect(result.data?.value).toBe(data)
3737
expect(result.loading.value).toBeFalsy()
3838
})
Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<template>
2-
<div>Username:{{ data }}</div>
3-
<div>Username:{{ loading ? 'loading...' : data1 }}</div>
2+
<div>Username:{{ loading ? 'loading' : data }}</div>
3+
<div>Username:{{ loading1 ? 'loading...' : data1 }}</div>
4+
<vhp-button @click="run">run</vhp-button>
45
</template>
56

67
<script lang="ts" setup>
@@ -9,21 +10,18 @@
910
function getUsername(): Promise<string> {
1011
return new Promise(resolve => {
1112
setTimeout(() => {
12-
resolve('vue-hooks-plus useRequest')
13-
}, 1000)
13+
resolve(`vue-hooks-plus useRequest A ${new Date().getTime()}`)
14+
}, 1)
1415
})
1516
}
1617
17-
function getUsername1(): Promise<string> {
18-
return new Promise(resolve => {
19-
setTimeout(() => {
20-
resolve('vue-hooks-plus useRequest A')
21-
}, 1000)
22-
})
23-
}
24-
25-
const { data } = useRequest(() => getUsername())
26-
const { data: data1, loading } = useRequest(() => getUsername1(), {
18+
const { data, loading, run: runData } = useRequest(() => getUsername())
19+
const { data: data1, loading: loading1, run: runData1 } = useRequest(() => getUsername(), {
2720
loadingDelay: 300,
2821
})
22+
23+
const run = () => {
24+
runData()
25+
runData1()
26+
}
2927
</script>
Lines changed: 22 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,28 @@
1-
import { unref, ref } from "vue";
2-
import type { UseRequestPlugin, Timeout } from "../types";
3-
4-
const useLoadingDelayPlugin: UseRequestPlugin<unknown, unknown[]> = (
5-
fetchInstance,
6-
{ loadingDelay }
7-
) => {
8-
const timerRef = ref<Timeout>();
9-
if (!unref(loadingDelay)) {
10-
return {};
11-
}
12-
13-
const cancelTimeout = () => {
14-
if (timerRef.value) {
15-
clearTimeout(timerRef.value);
16-
}
17-
};
18-
1+
import { ref, unref } from 'vue'
2+
import { Timeout, UseRequestPlugin } from '../types'
193

4+
const useLoadingDelayPlugin: UseRequestPlugin<unknown, unknown[]> = (inst, { loadingDelay }) => {
5+
const delayRef = ref<Timeout>()
206

217
return {
22-
name: "loadingDelayPlugin",
23-
onBefore: () => {
24-
cancelTimeout();
25-
timerRef.value = setTimeout(() => {
26-
fetchInstance.setState({
27-
loading: true,
28-
});
29-
}, (unref(loadingDelay)) as number);
30-
31-
return {
32-
loading: false,
33-
};
34-
},
8+
name: 'loadingDelayPlugin',
359
onFinally: () => {
36-
cancelTimeout();
37-
},
38-
onCancel: () => {
39-
cancelTimeout();
10+
if (delayRef.value) {
11+
clearTimeout(unref(delayRef.value))
12+
13+
delayRef.value = undefined
14+
}
15+
16+
inst.setState({
17+
loading: true,
18+
})
19+
setTimeout(() => {
20+
inst.setState({
21+
loading: false,
22+
})
23+
}, unref(loadingDelay))
4024
},
41-
};
42-
};
25+
}
26+
}
4327

44-
export default useLoadingDelayPlugin;
28+
export default useLoadingDelayPlugin

0 commit comments

Comments
 (0)