Dom上键值增加随机字符

This commit is contained in:
huangxuan 2023-12-05 19:57:07 +08:00
parent 0022a6b55a
commit 22036bc75d
No known key found for this signature in database
GPG Key ID: E79F50C67022565D
5 changed files with 19 additions and 9 deletions

View File

@ -21,6 +21,7 @@ import { findDOMByClassInst } from '../renderer/vnode/VNodeUtils';
import { listenSimulatedDelegatedEvents } from '../event/EventBinding';
import { Callback } from '../renderer/Types';
import { InulaNode } from '../types';
import { EVENT_KEY } from './DOMInternalKeys';
function createRoot(children: any, container: Container, callback?: Callback) {
// 清空容器
@ -89,7 +90,7 @@ function findDOMNode(domOrEle?: Element): null | Element | Text {
// 情况根节点监听器
function removeRootEventLister(container: Container) {
const events = (container as any).$EV;
const events = (container as any)[EVENT_KEY];
if (events) {
Object.keys(events).forEach(event => {
const listener = events[event];

View File

@ -22,9 +22,12 @@ import type { Container, Props } from './DOMOperator';
import { DomComponent, DomText, TreeRoot } from '../renderer/vnode/VNodeTags';
const INTERNAL_VNODE = '_inula_VNode';
const INTERNAL_PROPS = '_inula_Props';
const INTERNAL_NONDELEGATEEVENTS = '_inula_NonDelegatedEvents';
const randomKey = Math.random().toString(16).slice(2);
const INTERNAL_VNODE = `_inula_VNode_${randomKey}`;
const INTERNAL_PROPS = `_inula_Props_${randomKey}`;
const INTERNAL_NONDELEGATEEVENTS = `_inula_nonDelegatedEvents_${randomKey}`;
export const HANDLER_KEY = `_inula_valueChangeHandler_${randomKey}`;
export const EVENT_KEY = `_inula_ev_${randomKey}`;
// 通过 VNode 实例获取 DOM 节点
export function getDom(vNode: VNode): Element | Text | null {

View File

@ -18,7 +18,7 @@
* change事件
*/
const HANDLER_KEY = '_valueChangeHandler';
import { HANDLER_KEY } from '../DOMInternalKeys';
// 判断是否是 check 类型
function isCheckType(dom: HTMLInputElement): boolean {

View File

@ -18,7 +18,7 @@
*/
import { allDelegatedInulaEvents, portalDefaultDelegatedEvents, simulatedDelegatedEvents } from './EventHub';
import { isDocument } from '../dom/utils/Common';
import { getNearestVNode, getNonDelegatedListenerMap } from '../dom/DOMInternalKeys';
import { EVENT_KEY, getNearestVNode, getNonDelegatedListenerMap } from '../dom/DOMInternalKeys';
import { asyncUpdates, runDiscreteUpdates } from '../renderer/TreeBuilder';
import { handleEventMain } from './InulaEventMain';
import { decorateNativeEvent } from './EventWrapper';
@ -73,8 +73,8 @@ export function lazyDelegateOnRoot(currentRoot: VNode, eventName: string) {
const nativeFullName = isCapture ? nativeEvent + 'capture' : nativeEvent;
// 事件存储在DOM节点属性避免多个VNode(root和portal)对应同一个DOM, 造成事件重复监听
currentRoot.realNode.$EV = currentRoot.realNode.$EV ?? {};
const events = currentRoot.realNode.$EV;
currentRoot.realNode[EVENT_KEY] = currentRoot.realNode[EVENT_KEY] ?? {};
const events = currentRoot.realNode[EVENT_KEY];
if (!events[nativeFullName]) {
events[nativeFullName] = listenToNativeEvent(nativeEvent, currentRoot.realNode, isCapture);

View File

@ -142,7 +142,13 @@ function triggerInulaEvents(
const target = nativeEvent.target || nativeEvent.srcElement!;
// 触发普通委托事件
const listenerList: ListenerUnitList = getCommonListeners(nativeEvtName, vNode, nativeEvent, target, isCapture);
const listenerList: ListenerUnitList = getCommonListeners(
nativeEvtName,
vNode,
nativeEvent as MouseEvent,
target,
isCapture
);
let mouseEnterListeners: ListenerUnitList = [];
if (inulaEventToNativeMap.get('onMouseEnter')!.includes(nativeEvtName)) {