Match-id-512f37017e5b961d1e1fda10ea7176284f4acaf7

This commit is contained in:
* 2022-02-17 14:09:07 +08:00 committed by *
parent 3c1a4bc02a
commit fcd3a54a1a
1 changed files with 11 additions and 15 deletions

View File

@ -14,13 +14,9 @@ import {
TreeRoot, TreeRoot,
} from '../renderer/vnode/VNodeTags'; } from '../renderer/vnode/VNodeTags';
const prefix = '_horizon'; const INTERNAL_VNODE = '_horizon_VNode';
const INTERNAL_PROPS = '_horizon_Props';
const internalKeys = { const INTERNAL_NONDELEGATEEVENTS = '_horizon_NonDelegatedEvents';
VNode: `${prefix}VNode`,
props: `${prefix}Props`,
nonDelegatedEvents: `${prefix}NonDelegatedEvents`,
};
// 通过 VNode 实例获取 DOM 节点 // 通过 VNode 实例获取 DOM 节点
export function getDom(vNode: VNode): Element | Text | null { export function getDom(vNode: VNode): Element | Text | null {
@ -36,12 +32,12 @@ export function saveVNode(
vNode: VNode, vNode: VNode,
dom: Element | Text | Container, dom: Element | Text | Container,
): void { ): void {
dom[internalKeys.VNode] = vNode; dom[INTERNAL_VNODE] = vNode;
} }
// 用 DOM 节点,来找其对应的 VNode 实例 // 用 DOM 节点,来找其对应的 VNode 实例
export function getVNode(dom: Node|Container): VNode | null { export function getVNode(dom: Node|Container): VNode | null {
const vNode = dom[internalKeys.VNode] || (dom as Container)._treeRoot; const vNode = dom[INTERNAL_VNODE] || (dom as Container)._treeRoot;
if (vNode) { if (vNode) {
const {tag} = vNode; const {tag} = vNode;
if (tag === DomComponent || tag === DomText || tag === TreeRoot) { if (tag === DomComponent || tag === DomText || tag === TreeRoot) {
@ -53,7 +49,7 @@ export function getVNode(dom: Node|Container): VNode | null {
// 用 DOM 对象,来寻找其对应或者说是最近父级的 vNode // 用 DOM 对象,来寻找其对应或者说是最近父级的 vNode
export function getNearestVNode(dom: Node): null | VNode { export function getNearestVNode(dom: Node): null | VNode {
let vNode = dom[internalKeys.VNode]; let vNode = dom[INTERNAL_VNODE];
if (vNode) { // 如果是已经被框架标记过的 DOM 节点,那么直接返回其 VNode 实例 if (vNode) { // 如果是已经被框架标记过的 DOM 节点,那么直接返回其 VNode 实例
return vNode; return vNode;
} }
@ -62,7 +58,7 @@ export function getNearestVNode(dom: Node): null | VNode {
let parentDom = dom.parentNode; let parentDom = dom.parentNode;
let nearVNode = null; let nearVNode = null;
while (parentDom) { while (parentDom) {
vNode = parentDom[internalKeys.VNode]; vNode = parentDom[INTERNAL_VNODE];
if (vNode) { if (vNode) {
nearVNode = vNode; nearVNode = vNode;
break; break;
@ -74,19 +70,19 @@ export function getNearestVNode(dom: Node): null | VNode {
// 获取 vNode 上的属性相关信息 // 获取 vNode 上的属性相关信息
export function getVNodeProps(dom: Element | Text): Props | null{ export function getVNodeProps(dom: Element | Text): Props | null{
return dom[internalKeys.props] || null; return dom[INTERNAL_PROPS] || null;
} }
// 将 DOM 属性相关信息挂到 DOM 对象的特定属性上 // 将 DOM 属性相关信息挂到 DOM 对象的特定属性上
export function updateVNodeProps(dom: Element | Text, props: Props): void { export function updateVNodeProps(dom: Element | Text, props: Props): void {
dom[internalKeys.props] = props; dom[INTERNAL_PROPS] = props;
} }
export function getNonDelegatedListenerMap(dom: Element | Text): Map<string, EventListener> { export function getNonDelegatedListenerMap(dom: Element | Text): Map<string, EventListener> {
let eventsMap = dom[internalKeys.nonDelegatedEvents]; let eventsMap = dom[INTERNAL_NONDELEGATEEVENTS];
if (!eventsMap) { if (!eventsMap) {
eventsMap = new Map(); eventsMap = new Map();
dom[internalKeys.nonDelegatedEvents] = eventsMap; dom[INTERNAL_NONDELEGATEEVENTS] = eventsMap;
} }
return eventsMap; return eventsMap;
} }