From a36f7f9260ca38800854b464e055a9c9762ce986 Mon Sep 17 00:00:00 2001 From: * <8> Date: Wed, 23 Feb 2022 16:15:21 +0800 Subject: [PATCH] Match-id-cd373c95d0b3324947f005897eb475632af01f79 --- libs/horizon/src/dom/DOMOperator.ts | 7 +-- .../DOMPropertiesHandler.ts | 45 +++---------------- 2 files changed, 9 insertions(+), 43 deletions(-) diff --git a/libs/horizon/src/dom/DOMOperator.ts b/libs/horizon/src/dom/DOMOperator.ts index 894ccd96..073456fc 100644 --- a/libs/horizon/src/dom/DOMOperator.ts +++ b/libs/horizon/src/dom/DOMOperator.ts @@ -19,7 +19,7 @@ import { } from './valueHandler'; import { compareProps, - setDomProps, updateDomProps + setDomProps, } from './DOMPropertiesHandler/DOMPropertiesHandler'; import { isNativeElement, validateProps } from './validators/ValidateProps'; import { watchValueChange } from './valueHandler/ValueChangeHandler'; @@ -91,7 +91,8 @@ export function initDomProps(dom: Element, tagName: string, rawProps: Props): bo const props: Object = getPropsWithoutValue(tagName, dom, rawProps); // 初始化DOM属性(不包括value,defaultValue) - setDomProps(tagName, dom, props); + const isNativeTag = isNativeElement(tagName, props); + setDomProps(dom, props, isNativeTag, true); if (tagName === 'input' || tagName === 'textarea') { // 增加监听value和checked的set、get方法 @@ -167,7 +168,7 @@ export function submitDomUpdate(tag: string, vNode: VNode) { updateCommonProp(element, 'checked', newProps.checked, true); } const isNativeTag = isNativeElement(type, newProps); - updateDomProps(element, changeList, isNativeTag); + setDomProps(element, changeList, isNativeTag, false); updateValue(type, element, newProps); } } diff --git a/libs/horizon/src/dom/DOMPropertiesHandler/DOMPropertiesHandler.ts b/libs/horizon/src/dom/DOMPropertiesHandler/DOMPropertiesHandler.ts index e35e2b2a..c7f76f2f 100644 --- a/libs/horizon/src/dom/DOMPropertiesHandler/DOMPropertiesHandler.ts +++ b/libs/horizon/src/dom/DOMPropertiesHandler/DOMPropertiesHandler.ts @@ -6,15 +6,15 @@ import { setStyles } from './StyleHandler'; import { listenNonDelegatedEvent } from '../../event/EventBinding'; -import { isEventProp, isNativeElement } from '../validators/ValidateProps'; +import { isEventProp } from '../validators/ValidateProps'; -// 初始化DOM属性 +// 初始化DOM属性和更新 DOM 属性 export function setDomProps( - tagName: string, dom: Element, props: Object, + isNativeTag: boolean, + isInit: boolean, ): void { - const isNativeTag = isNativeElement(tagName, props); const keysOfProps = Object.keys(props); let propName; let propVal; @@ -37,42 +37,7 @@ export function setDomProps( } } else if (propName === 'dangerouslySetInnerHTML') { dom.innerHTML = propVal.__html; - } else { - if (propVal != null) { - updateCommonProp(dom, propName, propVal, isNativeTag); - } - } - } -} - -// 更新 DOM 属性 -export function updateDomProps( - dom: Element, - changeList: Object, - isNativeTag: boolean, -): void { - const keysOfProps = Object.keys(changeList); - let propName; - let propVal; - const keyLength = keysOfProps.length; - for(let i = 0; i < keyLength; i++) { - propName = keysOfProps[i]; - propVal = changeList[propName]; - if (propName === 'style') { - setStyles(dom, propVal); - } else if (isEventProp(propName)) { - // 事件监听属性处理 - if (!allDelegatedHorizonEvents.has(propName)) { - listenNonDelegatedEvent(propName, dom, propVal); - } - } else if (propName === 'children') { // 只处理纯文本子节点,其他children在VNode树中处理 - const type = typeof propVal; - if (type === 'string' || type === 'number') { - dom.textContent = propVal; - } - } else if (propName === 'dangerouslySetInnerHTML') { - dom.innerHTML = propVal.__html; - } else { + } else if (!isInit || (isInit && propVal != null)) { updateCommonProp(dom, propName, propVal, isNativeTag); } }