refactor: use faster key check
This commit is contained in:
parent
30404ec546
commit
1c42c96d1a
@ -1,5 +1,5 @@
|
|||||||
import { ComponentInstance } from './component'
|
import { ComponentInstance } from './component'
|
||||||
import { isString, isFunction } from '@vue/shared'
|
import { isFunction, isReservedKey } from '@vue/shared'
|
||||||
|
|
||||||
const bindCache = new WeakMap()
|
const bindCache = new WeakMap()
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ const renderProxyHandlers = {
|
|||||||
) {
|
) {
|
||||||
// computed
|
// computed
|
||||||
return target._computedGetters[key]()
|
return target._computedGetters[key]()
|
||||||
} else {
|
} else if (key[0] !== '_') {
|
||||||
if (__DEV__ && !(key in target)) {
|
if (__DEV__ && !(key in target)) {
|
||||||
// TODO warn non-present property
|
// TODO warn non-present property
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ const renderProxyHandlers = {
|
|||||||
receiver: any
|
receiver: any
|
||||||
): boolean {
|
): boolean {
|
||||||
if (__DEV__) {
|
if (__DEV__) {
|
||||||
if (isString(key) && key[0] === '$') {
|
if (isReservedKey(key)) {
|
||||||
// TODO warn setting immutable properties
|
// TODO warn setting immutable properties
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { ComponentInstance } from './component'
|
import { ComponentInstance } from './component'
|
||||||
import { observable } from '@vue/observer'
|
import { observable } from '@vue/observer'
|
||||||
|
import { isReservedKey } from '@vue/shared'
|
||||||
const internalRE = /^_|^\$/
|
|
||||||
|
|
||||||
export function initializeState(instance: ComponentInstance) {
|
export function initializeState(instance: ComponentInstance) {
|
||||||
const { data } = instance.$options
|
const { data } = instance.$options
|
||||||
@ -18,7 +17,7 @@ export function extractInitializers(
|
|||||||
const keys = Object.keys(instance)
|
const keys = Object.keys(instance)
|
||||||
for (let i = 0; i < keys.length; i++) {
|
for (let i = 0; i < keys.length; i++) {
|
||||||
const key = keys[i]
|
const key = keys[i]
|
||||||
if (!internalRE.test(key)) {
|
if (!isReservedKey(key)) {
|
||||||
data[key] = (instance as any)[key]
|
data[key] = (instance as any)[key]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import { patchStyle } from './modules/style'
|
|||||||
import { patchAttr } from './modules/attrs'
|
import { patchAttr } from './modules/attrs'
|
||||||
import { patchDOMProp } from './modules/props'
|
import { patchDOMProp } from './modules/props'
|
||||||
import { patchEvent } from './modules/events'
|
import { patchEvent } from './modules/events'
|
||||||
import { onRE } from '@vue/shared'
|
import { isOn } from '@vue/shared'
|
||||||
|
|
||||||
// value, checked, selected & muted
|
// value, checked, selected & muted
|
||||||
// plus anything with upperCase letter in it are always patched as properties
|
// plus anything with upperCase letter in it are always patched as properties
|
||||||
@ -29,13 +29,8 @@ export function patchData(
|
|||||||
patchStyle(el, prevValue, nextValue, nextVNode.data)
|
patchStyle(el, prevValue, nextValue, nextVNode.data)
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
if (onRE.test(key)) {
|
if (isOn(key)) {
|
||||||
patchEvent(
|
patchEvent(el, key.slice(2).toLowerCase(), prevValue, nextValue)
|
||||||
el,
|
|
||||||
key.replace(onRE, '').toLowerCase(),
|
|
||||||
prevValue,
|
|
||||||
nextValue
|
|
||||||
)
|
|
||||||
} else if (domPropsRE.test(key)) {
|
} else if (domPropsRE.test(key)) {
|
||||||
patchDOMProp(
|
patchDOMProp(
|
||||||
el,
|
el,
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import { VNode } from '@vue/core'
|
import { VNode } from '@vue/core'
|
||||||
import { handleDelegatedEvent } from './modules/events'
|
import { handleDelegatedEvent } from './modules/events'
|
||||||
import { onRE } from '@vue/shared'
|
import { isOn } from '@vue/shared'
|
||||||
|
|
||||||
export function teardownVNode(vnode: VNode) {
|
export function teardownVNode(vnode: VNode) {
|
||||||
const { el, data } = vnode
|
const { el, data } = vnode
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
for (const key in data) {
|
for (const key in data) {
|
||||||
if (onRE.test(key)) {
|
if (isOn(key)) {
|
||||||
handleDelegatedEvent(el, key.toLowerCase().slice(2), null)
|
handleDelegatedEvent(el, key.slice(2).toLowerCase(), null)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,11 @@ export const EMPTY_OBJ: { readonly [key: string]: any } = Object.freeze({})
|
|||||||
|
|
||||||
export const NOOP = () => {}
|
export const NOOP = () => {}
|
||||||
|
|
||||||
export const onRE = /^on/
|
|
||||||
export const reservedPropRE = /^(?:key|ref|slots)$|^vnode/
|
export const reservedPropRE = /^(?:key|ref|slots)$|^vnode/
|
||||||
|
|
||||||
|
export const isOn = (key: string) => key[0] === 'o' && key[1] === 'n'
|
||||||
|
export const isReservedKey = (key: string) => key[0] === '_' || key[0] === '$'
|
||||||
|
|
||||||
export const isArray = Array.isArray
|
export const isArray = Array.isArray
|
||||||
export const isFunction = (val: any): val is Function =>
|
export const isFunction = (val: any): val is Function =>
|
||||||
typeof val === 'function'
|
typeof val === 'function'
|
||||||
|
Loading…
Reference in New Issue
Block a user