refactor: improve cleanup of loading timer in button component

pull/8398/head
kyvg 2025-10-29 11:12:04 +02:00
parent 35b33adb00
commit cb39758371
1 changed files with 9 additions and 4 deletions

View File

@ -62,7 +62,7 @@ export default defineComponent({
watch( watch(
loadingOrDelay, loadingOrDelay,
val => { val => {
clearTimeout(delayTimeoutRef.value); cleanupTimer()
if (typeof loadingOrDelay.value === 'number') { if (typeof loadingOrDelay.value === 'number') {
delayTimeoutRef.value = setTimeout(() => { delayTimeoutRef.value = setTimeout(() => {
innerLoading.value = val; innerLoading.value = val;
@ -135,6 +135,13 @@ export default defineComponent({
return child; return child;
}; };
const cleanupTimer = () => {
if (delayTimeoutRef.value) {
clearTimeout(delayTimeoutRef.value);
delayTimeoutRef.value = undefined;
}
}
watchEffect(() => { watchEffect(() => {
devWarning( devWarning(
!(props.ghost && isUnborderedButtonType(props.type)), !(props.ghost && isUnborderedButtonType(props.type)),
@ -146,9 +153,7 @@ export default defineComponent({
onMounted(fixTwoCNChar); onMounted(fixTwoCNChar);
onUpdated(fixTwoCNChar); onUpdated(fixTwoCNChar);
onBeforeUnmount(() => { onBeforeUnmount(cleanupTimer);
delayTimeoutRef.value && clearTimeout(delayTimeoutRef.value);
});
const focus = () => { const focus = () => {
buttonNodeRef.value?.focus(); buttonNodeRef.value?.focus();