Browse Source

fix bug

main
谢亚昕 2 months ago
parent
commit
12428f8bd1
  1. 2
      package.json
  2. 1
      packages/core/src/index.ts
  3. 19
      packages/core/src/throttle/docs/demo.vue
  4. 9
      packages/core/src/throttle/docs/index.md
  5. 17
      packages/core/src/throttle/index.ts
  6. 13
      vitest.shared.ts

2
package.json

@ -12,7 +12,7 @@
"docs:serve": "vitepress serve packages", "docs:serve": "vitepress serve packages",
"test": "tsx scripts/test.mts", "test": "tsx scripts/test.mts",
"test:ui": "vitest --ui", "test:ui": "vitest --ui",
"coverage": "vitest run --coverage", "coverage": "vitest run --coverage --config ./vitest.shared.ts",
"changeset:add": "changeset add", "changeset:add": "changeset add",
"changeset:version": "changeset version", "changeset:version": "changeset version",
"changeset:publish": "changeset publish", "changeset:publish": "changeset publish",

1
packages/core/src/index.ts

@ -1,3 +1,4 @@
export * from "./date"; export * from "./date";
export * from "./common"; export * from "./common";
export * from "./debounce"; export * from "./debounce";
export * from "./throttle";

19
packages/core/src/throttle/docs/demo.vue

@ -0,0 +1,19 @@
<template>
<n-button @click="clickFn">点击</n-button>
<div>
<h4>输出结果</h4>
<div v-for="(item, index) in result" :key="index">
{{ item }}
</div>
</div>
</template>
<script lang="ts" setup>
import { throttle } from "@xyx-utils/core/throttle";
import { ref } from "vue";
const result = ref([])
const clickFn = throttle(()=>{
result.value.push("poll")
}, 1000)
</script>
<style lang="scss" scoped></style>

9
packages/core/src/throttle/docs/index.md

@ -0,0 +1,9 @@
---
title: 节流
category: 工具
---
<preview path="./demo.vue" title="时间" description="时间按指定格式输出"></preview>
当频繁点击时,每一秒执行一次

17
packages/core/src/throttle/index.ts

@ -0,0 +1,17 @@
export function throttle<T extends any[], R = void>(fn: (...argu: T) => R, interval: number = 200) {
let last;
let timer: ReturnType<typeof setTimeout> | void;
return function (this: void, ...argu: T) {
const now = +new Date();
if (last && now - last < interval) {
timer && clearTimeout(timer);
timer = setTimeout(() => {
last = now;
fn.apply(this, argu);
}, interval);
} else {
last = now;
fn.apply(this, argu);
}
};
}

13
vitest.shared.ts

@ -1,4 +1,4 @@
import { configDefaults, defineConfig } from "vitest/config"; import { configDefaults, defineConfig, coverageConfigDefaults } from "vitest/config";
import { resolve } from "path"; import { resolve } from "path";
const src = "src"; const src = "src";
@ -22,8 +22,15 @@ export default defineConfig({
coverage: { coverage: {
provider: "v8", provider: "v8",
enabled: true, enabled: true,
all: false, include: [
include: ["packages/browser/src/**"] "packages/vue3/src/**",
"packages/browser/src/**",
"packages/shared/src/**",
"packages/core/src/**",
"packages/node/src/**",
"packages/xyx-utils/src/**",
],
exclude: [...coverageConfigDefaults.exclude, "packages/**/docs/**", "packages/**\/test?(s)/**"]
}, },
}, },
}); });

Loading…
Cancel
Save