From fabcd23ecdc391988f6c5753d2424d4e26f7cc7d Mon Sep 17 00:00:00 2001 From: jsxon <1969485257@qq.com> Date: Thu, 28 Aug 2025 14:07:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E8=BD=AE=E8=AF=A2=E6=97=B6=EF=BC=8C=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E4=BA=86=E7=AA=97=E5=8F=A3=E4=B8=8D=E5=8F=AF=E8=A7=81?= =?UTF-8?q?=E5=81=9C=E6=AD=A2=E8=BD=AE=E8=AF=A2=EF=BC=8C=E7=A6=BB=E5=BC=80?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E5=86=8D=E5=9B=9E=20=E6=9D=A5=EF=BC=8C?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E8=BD=AE=E8=AF=A2=E8=AF=B7=E6=B1=82=E5=8F=AA?= =?UTF-8?q?=E5=89=A9=E4=B8=8B=E4=B8=80=E4=B8=AA=E8=AF=B7=E6=B1=82=E7=BB=A7?= =?UTF-8?q?=E7=BB=AD=E8=BD=AE=E8=AF=A2=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=88?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E9=97=AE=E9=A2=98=E5=B7=B2=E5=9C=A8ahooks?= =?UTF-8?q?=E4=B8=AD=E4=BF=AE=E6=94=B9=E4=B8=80=E7=89=88=E5=B9=B6=E5=90=88?= =?UTF-8?q?=E5=85=A5=E4=B8=BB=E5=88=86=E6=94=AF=20=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=EF=BC=9Ahttps://github.com/alibaba/hooks/pull/2688=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../use-request/src/utils/subscribeFocus.ts | 23 ++++++++----------- .../src/utils/subscribeReVisible.ts | 16 ++++++------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/packages/use-request/src/utils/subscribeFocus.ts b/packages/use-request/src/utils/subscribeFocus.ts index e0170a8a..96c68dd2 100644 --- a/packages/use-request/src/utils/subscribeFocus.ts +++ b/packages/use-request/src/utils/subscribeFocus.ts @@ -6,28 +6,25 @@ import isOnline from './isOnline' type Listener = () => void -const listeners: Listener[] = [] +const listeners = new Set(); function subscribe(listener: Listener) { - listeners.push(listener) + listeners.add(listener); + return function unsubscribe() { - const index = listeners.indexOf(listener) - if (index > -1) { - listeners.splice(index, 1) - } - } + listeners.has(listener) && listeners.delete(listener); + }; } if (isBrowser) { const revalidate = () => { if (!isDocumentVisible() || !isOnline()) return - for (let i = 0; i < listeners.length; i++) { - const listener = listeners[i] - listener() - } + listeners.forEach(listener => { + listener(); + }) } - window.addEventListener('visibilitychange', revalidate, false) - window.addEventListener('focus', revalidate, false) + window.addEventListener('visibilitychange', revalidate, false); + window.addEventListener('focus', revalidate, false); } export default subscribe diff --git a/packages/use-request/src/utils/subscribeReVisible.ts b/packages/use-request/src/utils/subscribeReVisible.ts index aa611bd7..1829777e 100644 --- a/packages/use-request/src/utils/subscribeReVisible.ts +++ b/packages/use-request/src/utils/subscribeReVisible.ts @@ -1,23 +1,23 @@ import isDocumentVisible from "./isDocumentVisible"; import { canUseDom } from "./utils"; -const listeners: any[] = []; +type Listener = () => void; -function subscribe(listener: () => void) { - listeners.push(listener); +const listeners = new Set(); + +function subscribe(listener: Listener) { + listeners.add(listener); return function unsubscribe() { - const index = listeners.indexOf(listener); - listeners.splice(index, 1); + listeners.has(listener) && listeners.delete(listener); }; } if (canUseDom()) { const revalidate = () => { if (!isDocumentVisible()) return; - for (let i = 0; i < listeners.length; i++) { - const listener = listeners[i]; + listeners.forEach(listener => { listener(); - } + }); }; window.addEventListener("visibilitychange", revalidate, false); }