From 74c1452b078f9fa9f0304ed7f974acb47a7c706a Mon Sep 17 00:00:00 2001 From: * <8> Date: Thu, 17 Feb 2022 14:58:30 +0800 Subject: [PATCH] Match-id-b5f917c72588dc46381019cba0455e0369de6e5b --- libs/horizon/src/renderer/ContextSaver.ts | 12 ++++++-- .../src/renderer/render/DomComponent.ts | 30 +++++++++---------- libs/horizon/src/renderer/vnode/VNode.ts | 2 +- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/libs/horizon/src/renderer/ContextSaver.ts b/libs/horizon/src/renderer/ContextSaver.ts index 05847b08..62586895 100644 --- a/libs/horizon/src/renderer/ContextSaver.ts +++ b/libs/horizon/src/renderer/ContextSaver.ts @@ -30,10 +30,18 @@ let ctxOldChange: Boolean = false; let ctxOldPreviousContext: Object = {}; function setContext(vNode: VNode, contextName, value) { - vNode.contexts[contextName] = value; + if (vNode.contexts === null) { + vNode.contexts = { + [contextName]: value, + }; + } else { + vNode.contexts[contextName] = value; + } } function getContext(vNode: VNode, contextName) { - return vNode.contexts[contextName]; + if (vNode.contexts !== null) { + return vNode.contexts[contextName]; + } } // capture阶段设置 diff --git a/libs/horizon/src/renderer/render/DomComponent.ts b/libs/horizon/src/renderer/render/DomComponent.ts index fff571a6..7aef0d8d 100644 --- a/libs/horizon/src/renderer/render/DomComponent.ts +++ b/libs/horizon/src/renderer/render/DomComponent.ts @@ -1,5 +1,5 @@ -import type {VNode} from '../Types'; -import type {Props} from '../../dom/DOMOperator'; +import type { VNode } from '../Types'; +import type { Props } from '../../dom/DOMOperator'; import { getNamespaceCtx, @@ -12,10 +12,10 @@ import { initDomProps, getPropChangeList, isTextChild, } from '../../dom/DOMOperator'; -import {FlagUtils} from '../vnode/VNodeFlags'; -import {createVNodeChildren, markRef} from './BaseComponent'; -import {DomComponent, DomPortal, DomText} from '../vnode/VNodeTags'; -import {getFirstChild, travelVNodeTree} from '../vnode/VNodeUtils'; +import { FlagUtils } from '../vnode/VNodeFlags'; +import { createVNodeChildren, markRef } from './BaseComponent'; +import { DomComponent, DomPortal, DomText } from '../vnode/VNodeTags'; +import { travelVNodeTree } from '../vnode/VNodeUtils'; function updateDom( processing: VNode, @@ -80,15 +80,15 @@ export function bubbleRender(processing: VNode) { // 把dom类型的子节点append到parent dom中 const vNode = processing.child; if (vNode !== null) { - // 向下递归它的子节点,查找所有终端节点。 - travelVNodeTree(vNode, node => { - if (node.tag === DomComponent || node.tag === DomText) { - appendChildElement(dom, node.realNode); - } - }, node => - // 已经append到父节点,或者是DomPortal都不需要处理child了 - node.tag === DomComponent || node.tag === DomText || node.tag === DomPortal - , processing); + // 向下递归它的子节点,查找所有终端节点。 + travelVNodeTree(vNode, node => { + if (node.tag === DomComponent || node.tag === DomText) { + appendChildElement(dom, node.realNode); + } + }, node => + // 已经append到父节点,或者是DomPortal都不需要处理child了 + node.tag === DomComponent || node.tag === DomText || node.tag === DomPortal + , processing); } processing.realNode = dom; diff --git a/libs/horizon/src/renderer/vnode/VNode.ts b/libs/horizon/src/renderer/vnode/VNode.ts index 0562b7d2..1160681a 100644 --- a/libs/horizon/src/renderer/vnode/VNode.ts +++ b/libs/horizon/src/renderer/vnode/VNode.ts @@ -42,7 +42,7 @@ export class VNode { task: any; // 使用这个变量来记录修改前的值,用于恢复。 - contexts = {}; + contexts: any = null; // 因为LazyComponent会修改tag和type属性,为了能识别,增加一个属性 isLazyComponent: boolean = false;