diff --git a/libs/extension/src/parser/parseVNode.ts b/libs/extension/src/parser/parseVNode.ts index fbf4b0bd..b62eacc6 100644 --- a/libs/extension/src/parser/parseVNode.ts +++ b/libs/extension/src/parser/parseVNode.ts @@ -1,13 +1,17 @@ -import { travelVNodeTree } from '../../../../libs/horizon/src/renderer/vnode/VNodeUtils'; -import { VNode } from '../../../../libs/horizon/src/renderer/Types'; -import { ClassComponent, FunctionComponent } from '../../../../libs/horizon/src/renderer/vnode/VNodeTags'; +import { travelVNodeTree } from '../../../horizon/src/renderer/vnode/VNodeUtils'; +import { VNode } from '../../../horizon/src/renderer/vnode/VNode'; +import { ClassComponent, FunctionComponent } from '../../../horizon/src/renderer/vnode/VNodeTags'; // 建立双向映射关系,当用户在修改属性值后,可以找到对应的 VNode const VNodeToIdMap = new Map(); const IdToVNodeMap = new Map(); let uid = 0; -function generateUid () { +function generateUid (vNode: VNode) { + const id = VNodeToIdMap.get(vNode); + if (id !== undefined) { + return id; + } uid++; return uid; } @@ -33,7 +37,7 @@ function parseTreeRoot(treeRoot: VNode) { travelVNodeTree(treeRoot, (node: VNode) => { const tag = node.tag; if (isUserComponent(tag)) { - const id = generateUid(); + const id = generateUid(node); result.push(id); const name = node.type.name; result.push(name);