From 75e24f26e03264d2dda7931daf16291dd1dc7ba6 Mon Sep 17 00:00:00 2001 From: * <8> Date: Thu, 8 Dec 2022 21:19:21 +0800 Subject: [PATCH] Match-id-2f0b8623c7ad7dda87cc0913e6702ddc6569c16c --- libs/horizon/src/horizonx/devtools/index.ts | 13 +++++++++++-- libs/horizon/src/horizonx/proxy/Observer.ts | 4 +++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/libs/horizon/src/horizonx/devtools/index.ts b/libs/horizon/src/horizonx/devtools/index.ts index 9bb712b9..e7f3514e 100644 --- a/libs/horizon/src/horizonx/devtools/index.ts +++ b/libs/horizon/src/horizonx/devtools/index.ts @@ -96,7 +96,7 @@ function getAffectedComponents() { // listens to messages from background window.addEventListener('message', messageEvent => { - if (messageEvent.data.payload.type === 'horizonx request observed components') { + if (messageEvent?.data?.payload?.type === 'horizonx request observed components') { // get observed components setTimeout(() => { window.postMessage({ @@ -107,5 +107,14 @@ window.addEventListener('message', messageEvent => { }, 100); } - + // executes store action + if (messageEvent.data.payload.type === 'horizonx executue action') { + const data = messageEvent.data.payload.data; + const store = getStore(data.storeId); + if (!store?.[data.action]) return; + + const action = store[data.action]; + const params = data.params; + action(...params); + } }); diff --git a/libs/horizon/src/horizonx/proxy/Observer.ts b/libs/horizon/src/horizonx/proxy/Observer.ts index adef63fc..b1aa43d7 100644 --- a/libs/horizon/src/horizonx/proxy/Observer.ts +++ b/libs/horizon/src/horizonx/proxy/Observer.ts @@ -79,7 +79,9 @@ export class Observer implements IObserver { // 对象的属性被赋值时调用 setProp(key: string | symbol, mutation: any): void { const vNodes = this.keyVNodes.get(key); - vNodes?.forEach((vNode: VNode) => { + //NOTE: using Set directly can lead to deadlock + const vNodeArray = Array.from(vNodes || []); + vNodeArray?.forEach((vNode: VNode) => { if (vNode.isStoreChange) { // VNode已经被触发过,不再重复触发 return;