refactor: remove null comparisons

This commit is contained in:
Evan You 2020-03-18 18:14:51 -04:00
parent 811f28a7d1
commit ba9a91c48c
18 changed files with 104 additions and 119 deletions

View File

@ -545,7 +545,7 @@ function parseAttribute(
{
const pattern = /["'<]/g
let m: RegExpExecArray | null
while ((m = pattern.exec(name)) !== null) {
while ((m = pattern.exec(name))) {
emitError(
context,
ErrorCodes.UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME,
@ -696,7 +696,7 @@ function parseAttributeValue(
}
const unexpectedChars = /["'<=`]/g
let m: RegExpExecArray | null
while ((m = unexpectedChars.exec(match[0])) !== null) {
while ((m = unexpectedChars.exec(match[0]))) {
emitError(
context,
ErrorCodes.UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE,

View File

@ -46,7 +46,7 @@ export let activeEffect: ReactiveEffect | undefined
export const ITERATE_KEY = Symbol('iterate')
export function isEffect(fn: any): fn is ReactiveEffect {
return fn != null && fn._isEffect === true
return fn && fn._isEffect === true
}
export function effect<T = any>(

View File

@ -229,7 +229,7 @@ function doWatch(
scheduler = invoke
} else if (flush === 'pre') {
scheduler = job => {
if (!instance || instance.vnode.el != null) {
if (!instance || instance.isMounted) {
queueJob(job)
} else {
// with 'pre' option, the first call must happen before

View File

@ -98,7 +98,7 @@ export function resolveProps(
rawProps: Data | null,
_options: ComponentPropsOptions | void
) {
const hasDeclaredProps = _options != null
const hasDeclaredProps = !!_options
if (!rawProps && !hasDeclaredProps) {
return
}
@ -122,7 +122,7 @@ export function resolveProps(
// allow mutation of propsProxy (which is readonly by default)
unlock()
if (rawProps != null) {
if (rawProps) {
for (const key in rawProps) {
const value = rawProps[key]
// key, ref are reserved and never passed down
@ -186,10 +186,7 @@ export function resolveProps(
// in case of dynamic props, check if we need to delete keys from
// the props proxy
const { patchFlag } = instance.vnode
if (
propsProxy !== null &&
(patchFlag === 0 || patchFlag & PatchFlags.FULL_PROPS)
) {
if (propsProxy && (patchFlag === 0 || patchFlag & PatchFlags.FULL_PROPS)) {
const rawInitialProps = toRaw(propsProxy)
for (const key in rawInitialProps) {
if (!hasOwn(props, key)) {
@ -250,7 +247,7 @@ function normalizePropsOptions(
const opt = raw[key]
const prop: NormalizedProp = (options[normalizedKey] =
isArray(opt) || isFunction(opt) ? { type: opt } : opt)
if (prop != null) {
if (prop) {
const booleanIndex = getTypeIndex(Boolean, prop.type)
const stringIndex = getTypeIndex(String, prop.type)
prop[BooleanFlags.shouldCast] = booleanIndex > -1

View File

@ -109,7 +109,7 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
} else if (renderContext !== EMPTY_OBJ && hasOwn(renderContext, key)) {
accessCache![key] = AccessTypes.CONTEXT
return renderContext[key]
} else if (type.props != null) {
} else if (type.props) {
// only cache other properties when instance has declared (this stable)
// props
if (hasOwn(props, key)) {
@ -125,20 +125,20 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
// public $xxx properties & user-attached properties (sink)
const publicGetter = publicPropertiesMap[key]
let cssModule
if (publicGetter != null) {
if (publicGetter) {
if (__DEV__ && key === '$attrs') {
markAttrsAccessed()
}
return publicGetter(target)
} else if (
__BUNDLER__ &&
(cssModule = type.__cssModules) != null &&
(cssModule = type.__cssModules) &&
(cssModule = cssModule[key])
) {
return cssModule
} else if (hasOwn(sink, key)) {
return sink[key]
} else if (__DEV__ && currentRenderingInstance != null) {
} else if (__DEV__ && currentRenderingInstance) {
warn(
`Property ${JSON.stringify(key)} was accessed during render ` +
`but is not defined on instance.`
@ -152,7 +152,7 @@ export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
accessCache![key] !== undefined ||
(data !== EMPTY_OBJ && hasOwn(data, key)) ||
hasOwn(renderContext, key) ||
(type.props != null && hasOwn(type.props, key)) ||
(type.props && hasOwn(type.props, key)) ||
hasOwn(publicPropertiesMap, key) ||
hasOwn(sink, key)
)

View File

@ -90,7 +90,7 @@ export function renderComponentRoot(
result = cloneVNode(result, fallthroughAttrs)
// If the child root node is a compiler optimized vnode, make sure it
// force update full props to account for the merged attrs.
if (result.dynamicChildren !== null) {
if (result.dynamicChildren) {
result.patchFlag |= PatchFlags.FULL_PROPS
}
} else if (__DEV__ && !accessedAttrs && result.type !== Comment) {
@ -109,7 +109,7 @@ export function renderComponentRoot(
result = cloneVNode(result, { [parentScopeId]: '' })
}
// inherit directives
if (vnode.dirs != null) {
if (vnode.dirs) {
if (__DEV__ && !isElementRoot(result)) {
warn(
`Runtime directive used on component with non-element root node. ` +
@ -119,7 +119,7 @@ export function renderComponentRoot(
result.dirs = vnode.dirs
}
// inherit transition data
if (vnode.transition != null) {
if (vnode.transition) {
if (__DEV__ && !isElementRoot(result)) {
warn(
`Component inside <Transition> renders non-element root node ` +
@ -185,7 +185,7 @@ export function shouldUpdateComponent(
}
// force child update on runtime directive usage on component vnode.
if (nextVNode.dirs != null) {
if (nextVNode.dirs) {
return true
}
@ -218,18 +218,18 @@ export function shouldUpdateComponent(
} else if (!optimized) {
// this path is only taken by manually written render functions
// so presence of any children leads to a forced update
if (prevChildren != null || nextChildren != null) {
if (nextChildren == null || !(nextChildren as any).$stable) {
if (prevChildren || nextChildren) {
if (!nextChildren || !(nextChildren as any).$stable) {
return true
}
}
if (prevProps === nextProps) {
return false
}
if (prevProps === null) {
return nextProps !== null
if (!prevProps) {
return !!nextProps
}
if (nextProps === null) {
if (!nextProps) {
return true
}
return hasPropsChanged(prevProps, nextProps)

View File

@ -40,7 +40,7 @@ const normalizeSlot = (
ctx: ComponentInternalInstance | null | undefined
): Slot =>
withCtx((props: any) => {
if (__DEV__ && currentInstance != null) {
if (__DEV__ && currentInstance) {
warn(
`Slot "${key}" invoked outside of the render function: ` +
`this will not track dependencies used in the slot. ` +
@ -80,7 +80,7 @@ export function resolveSlots(
}
}
}
} else if (children !== null) {
} else if (children) {
// non slot object children (direct value) passed to a component
if (__DEV__ && !isKeepAlive(instance.vnode)) {
warn(

View File

@ -85,7 +85,7 @@ const KeepAliveImpl = {
queuePostRenderEffect(() => {
const component = vnode.component!
component.isDeactivated = false
if (component.a !== null) {
if (component.a) {
invokeHooks(component.a)
}
}, parentSuspense)
@ -95,7 +95,7 @@ const KeepAliveImpl = {
move(vnode, storageContainer, null, MoveType.LEAVE, parentSuspense)
queuePostRenderEffect(() => {
const component = vnode.component!
if (component.da !== null) {
if (component.da) {
invokeHooks(component.da)
}
component.isDeactivated = true

View File

@ -44,7 +44,7 @@ export const PortalImpl = {
const target = (n2.target = isString(targetSelector)
? querySelector!(targetSelector)
: targetSelector)
if (target != null) {
if (target) {
if (shapeFlag & ShapeFlags.TEXT_CHILDREN) {
setElementText(target, children as string)
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
@ -93,7 +93,7 @@ export const PortalImpl = {
const nextTarget = (n2.target = isString(targetSelector)
? querySelector!(targetSelector)
: targetSelector)
if (nextTarget != null) {
if (nextTarget) {
// move content
if (shapeFlag & ShapeFlags.TEXT_CHILDREN) {
setElementText(target, '')

View File

@ -536,7 +536,7 @@ export function queueEffectWithSuspense(
fn: Function | Function[],
suspense: SuspenseBoundary | null
): void {
if (suspense !== null && !suspense.isResolved) {
if (suspense && !suspense.isResolved) {
if (isArray(fn)) {
suspense.effects.push(...fn)
} else {

View File

@ -79,7 +79,7 @@ export function callWithAsyncErrorHandling(
): any[] {
if (isFunction(fn)) {
const res = callWithErrorHandling(fn, instance, type, args)
if (res != null && !res._isVue && isPromise(res)) {
if (res && !res._isVue && isPromise(res)) {
res.catch(err => {
handleError(err, instance, type)
})
@ -108,7 +108,7 @@ export function handleError(
const errorInfo = __DEV__ ? ErrorTypeStrings[type] : type
while (cur) {
const errorCapturedHooks = cur.ec
if (errorCapturedHooks !== null) {
if (errorCapturedHooks) {
for (let i = 0; i < errorCapturedHooks.length; i++) {
if (errorCapturedHooks[i](err, exposedInstance, errorInfo)) {
return

View File

@ -199,12 +199,12 @@ export function createHydrationFunctions(
parentSuspense: SuspenseBoundary | null,
optimized: boolean
) => {
optimized = optimized || vnode.dynamicChildren !== null
optimized = optimized || !!vnode.dynamicChildren
const { props, patchFlag, shapeFlag, dirs } = vnode
// skip props & children if this is hoisted static nodes
if (patchFlag !== PatchFlags.HOISTED) {
// props
if (props !== null) {
if (props) {
if (
!optimized ||
(patchFlag & PatchFlags.FULL_PROPS ||
@ -215,7 +215,7 @@ export function createHydrationFunctions(
patchProp(el, key, null, props[key])
}
}
} else if (props.onClick != null) {
} else if (props.onClick) {
// Fast path for click listeners (which is most often) to avoid
// iterating through props.
patchProp(el, 'onClick', null, props.onClick)
@ -223,16 +223,13 @@ export function createHydrationFunctions(
}
// vnode / directive hooks
let vnodeHooks: VNodeHook | null | undefined
if ((vnodeHooks = props && props.onVnodeBeforeMount) != null) {
if ((vnodeHooks = props && props.onVnodeBeforeMount)) {
invokeVNodeHook(vnodeHooks, parentComponent, vnode)
}
if (dirs != null) {
if (dirs) {
invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount')
}
if (
(vnodeHooks = props && props.onVnodeMounted) != null ||
dirs != null
) {
if ((vnodeHooks = props && props.onVnodeMounted) || dirs) {
queueEffectWithSuspense(() => {
vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode)
dirs && invokeDirectiveHook(vnode, null, parentComponent, 'mounted')
@ -242,7 +239,7 @@ export function createHydrationFunctions(
if (
shapeFlag & ShapeFlags.ARRAY_CHILDREN &&
// skip if element has innerHTML / textContent
!(props !== null && (props.innerHTML || props.textContent))
!(props && (props.innerHTML || props.textContent))
) {
let next = hydrateChildren(
el.firstChild,
@ -291,7 +288,7 @@ export function createHydrationFunctions(
parentSuspense: SuspenseBoundary | null,
optimized: boolean
): Node | null => {
optimized = optimized || vnode.dynamicChildren !== null
optimized = optimized || !!vnode.dynamicChildren
const children = vnode.children as VNode[]
const l = children.length
let hasWarned = false
@ -369,7 +366,7 @@ export function createHydrationFunctions(
const target = (vnode.target = isString(targetSelector)
? document.querySelector(targetSelector)
: targetSelector)
if (target != null && vnode.shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
if (target && vnode.shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
hydrateChildren(
target.firstChild,
vnode,

View File

@ -348,7 +348,7 @@ function baseCreateRenderer<
optimized = false
) => {
// patching & not same type, unmount old tree
if (n1 != null && !isSameVNodeType(n1, n2)) {
if (n1 && !isSameVNodeType(n1, n2)) {
anchor = getNextHostNode(n1)
unmount(n1, parentComponent, parentSuspense, true)
n1 = null
@ -476,7 +476,7 @@ function baseCreateRenderer<
anchor: HostNode | null,
isSVG: boolean
) => {
if (n2.el != null && hostCloneNode !== undefined) {
if (n2.el && hostCloneNode !== undefined) {
hostInsert(hostCloneNode(n2.el), container, anchor)
} else {
// static nodes are only present when used with compiler-dom/runtime-dom
@ -514,7 +514,7 @@ function baseCreateRenderer<
} else {
patchElement(n1, n2, parentComponent, parentSuspense, isSVG, optimized)
}
if (n2.ref !== null && parentComponent !== null) {
if (n2.ref != null && parentComponent) {
setRef(n2.ref, n1 && n1.ref, parentComponent, n2.el)
}
}
@ -540,7 +540,7 @@ function baseCreateRenderer<
dirs
} = vnode
if (
vnode.el !== null &&
vnode.el &&
hostCloneNode !== undefined &&
patchFlag === PatchFlags.HOISTED
) {
@ -551,29 +551,29 @@ function baseCreateRenderer<
} else {
el = vnode.el = hostCreateElement(vnode.type as string, isSVG)
// props
if (props != null) {
if (props) {
for (const key in props) {
if (!isReservedProp(key)) {
hostPatchProp(el, key, null, props[key], isSVG)
}
}
if ((vnodeHook = props.onVnodeBeforeMount) != null) {
if ((vnodeHook = props.onVnodeBeforeMount)) {
invokeVNodeHook(vnodeHook, parentComponent, vnode)
}
}
if (dirs != null) {
if (dirs) {
invokeDirectiveHook(vnode, null, parentComponent, 'beforeMount')
}
// scopeId
if (__BUNDLER__) {
if (scopeId !== null) {
if (scopeId) {
hostSetScopeId(el, scopeId)
}
const treeOwnerId = parentComponent && parentComponent.type.__scopeId
// vnode's own scopeId and the current patched component's scopeId is
// different - this is a slot content node.
if (treeOwnerId != null && treeOwnerId !== scopeId) {
if (treeOwnerId && treeOwnerId !== scopeId) {
hostSetScopeId(el, treeOwnerId + '-s')
}
}
@ -589,19 +589,19 @@ function baseCreateRenderer<
parentComponent,
parentSuspense,
isSVG && type !== 'foreignObject',
optimized || vnode.dynamicChildren !== null
optimized || !!vnode.dynamicChildren
)
}
if (transition != null && !transition.persisted) {
if (transition && !transition.persisted) {
transition.beforeEnter(el)
}
}
hostInsert(el, container, anchor)
if (
(vnodeHook = props && props.onVnodeMounted) != null ||
(transition != null && !transition.persisted) ||
dirs != null
(vnodeHook = props && props.onVnodeMounted) ||
(transition && !transition.persisted) ||
dirs
) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode)
@ -652,10 +652,10 @@ function baseCreateRenderer<
const newProps = n2.props || EMPTY_OBJ
let vnodeHook: VNodeHook | undefined | null
if ((vnodeHook = newProps.onVnodeBeforeUpdate) != null) {
if ((vnodeHook = newProps.onVnodeBeforeUpdate)) {
invokeVNodeHook(vnodeHook, parentComponent, n2, n1)
}
if (dirs != null) {
if (dirs) {
invokeDirectiveHook(n2, n1, parentComponent, 'beforeUpdate')
}
@ -748,7 +748,7 @@ function baseCreateRenderer<
}
const areChildrenSVG = isSVG && n2.type !== 'foreignObject'
if (dynamicChildren != null) {
if (dynamicChildren) {
patchBlockChildren(
n1.dynamicChildren!,
dynamicChildren,
@ -770,7 +770,7 @@ function baseCreateRenderer<
)
}
if ((vnodeHook = newProps.onVnodeUpdated) != null || dirs != null) {
if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1)
dirs && invokeDirectiveHook(n2, n1, parentComponent, 'updated')
@ -906,7 +906,7 @@ function baseCreateRenderer<
optimized
)
} else {
if (patchFlag & PatchFlags.STABLE_FRAGMENT && dynamicChildren != null) {
if (patchFlag & PatchFlags.STABLE_FRAGMENT && dynamicChildren) {
// a stable fragment (template root or <template v-for>) doesn't need to
// patch children order, but it may contain dynamicChildren.
patchBlockChildren(
@ -997,7 +997,7 @@ function baseCreateRenderer<
n2.el = n1.el
}
}
if (n2.ref !== null && parentComponent !== null) {
if (n2.ref != null && parentComponent) {
if (__DEV__ && !(n2.shapeFlag & ShapeFlags.STATEFUL_COMPONENT)) {
pushWarningContext(n2)
warn(
@ -1023,7 +1023,7 @@ function baseCreateRenderer<
parentComponent
))
if (__HMR__ && instance.type.__hmrId != null) {
if (__HMR__ && instance.type.__hmrId) {
registerHMR(instance)
}
@ -1089,11 +1089,11 @@ function baseCreateRenderer<
const { bm, m, a, parent } = instance
const subTree = (instance.subTree = renderComponentRoot(instance))
// beforeMount hook
if (bm !== null) {
if (bm) {
invokeHooks(bm)
}
// onVnodeBeforeMount
if ((vnodeHook = props && props.onVnodeBeforeMount) != null) {
if ((vnodeHook = props && props.onVnodeBeforeMount)) {
invokeVNodeHook(vnodeHook, parent, initialVNode)
}
if (el && hydrateNode) {
@ -1117,18 +1117,18 @@ function baseCreateRenderer<
initialVNode.el = subTree.el
}
// mounted hook
if (m !== null) {
if (m) {
queuePostRenderEffect(m, parentSuspense)
}
// onVnodeMounted
if ((vnodeHook = props && props.onVnodeMounted) != null) {
if ((vnodeHook = props && props.onVnodeMounted)) {
queuePostRenderEffect(() => {
invokeVNodeHook(vnodeHook!, parent, initialVNode)
}, parentSuspense)
}
// activated hook for keep-alive roots.
if (
a !== null &&
a &&
initialVNode.shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE
) {
queuePostRenderEffect(a, parentSuspense)
@ -1144,7 +1144,7 @@ function baseCreateRenderer<
pushWarningContext(next || instance.vnode)
}
if (next !== null) {
if (next) {
updateComponentPreRender(instance, next)
} else {
next = vnode
@ -1154,13 +1154,11 @@ function baseCreateRenderer<
instance.subTree = nextTree
next.el = vnode.el
// beforeUpdate hook
if (bu !== null) {
if (bu) {
invokeHooks(bu)
}
// onVnodeBeforeUpdate
if (
(vnodeHook = next.props && next.props.onVnodeBeforeUpdate) != null
) {
if ((vnodeHook = next.props && next.props.onVnodeBeforeUpdate)) {
invokeVNodeHook(vnodeHook, parent, next, vnode)
}
// reset refs
@ -1187,11 +1185,11 @@ function baseCreateRenderer<
updateHOCHostEl(instance, nextTree.el)
}
// updated hook
if (u !== null) {
if (u) {
queuePostRenderEffect(u, parentSuspense)
}
// onVnodeUpdated
if ((vnodeHook = next.props && next.props.onVnodeUpdated) != null) {
if ((vnodeHook = next.props && next.props.onVnodeUpdated)) {
queuePostRenderEffect(() => {
invokeVNodeHook(vnodeHook!, parent, next!, vnode)
}, parentSuspense)
@ -1632,7 +1630,7 @@ function baseCreateRenderer<
const needTransition =
type !== MoveType.REORDER &&
shapeFlag & ShapeFlags.ELEMENT &&
transition != null
transition
if (needTransition) {
if (type === MoveType.ENTER) {
transition!.beforeEnter(el!)
@ -1666,15 +1664,15 @@ function baseCreateRenderer<
doRemove = false
) => {
const { props, ref, children, dynamicChildren, shapeFlag, dirs } = vnode
const shouldInvokeDirs = dirs != null && shapeFlag & ShapeFlags.ELEMENT
const shouldInvokeDirs = shapeFlag & ShapeFlags.ELEMENT && dirs
let vnodeHook: VNodeHook | undefined | null
// unset ref
if (ref !== null && parentComponent !== null) {
if (ref != null && parentComponent) {
setRef(ref, null, parentComponent, null)
}
if ((vnodeHook = props && props.onVnodeBeforeUnmount) != null) {
if ((vnodeHook = props && props.onVnodeBeforeUnmount)) {
invokeVNodeHook(vnodeHook, parentComponent, vnode)
}
@ -1694,7 +1692,7 @@ function baseCreateRenderer<
invokeDirectiveHook(vnode, null, parentComponent, 'beforeUnmount')
}
if (dynamicChildren != null) {
if (dynamicChildren) {
// fast path for block nodes: only need to unmount dynamic children.
unmountChildren(dynamicChildren, parentComponent, parentSuspense)
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
@ -1710,10 +1708,7 @@ function baseCreateRenderer<
}
}
if (
(vnodeHook = props && props.onVnodeUnmounted) != null ||
shouldInvokeDirs
) {
if ((vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode)
shouldInvokeDirs &&
@ -1731,18 +1726,14 @@ function baseCreateRenderer<
const performRemove = () => {
hostRemove(el!)
if (
transition != null &&
!transition.persisted &&
transition.afterLeave
) {
if (transition && !transition.persisted && transition.afterLeave) {
transition.afterLeave()
}
}
if (
vnode.shapeFlag & ShapeFlags.ELEMENT &&
transition != null &&
transition &&
!transition.persisted
) {
const { leave, delayLeave } = transition
@ -1774,33 +1765,33 @@ function baseCreateRenderer<
parentSuspense: HostSuspenseBoundary | null,
doRemove?: boolean
) => {
if (__HMR__ && instance.type.__hmrId != null) {
if (__HMR__ && instance.type.__hmrId) {
unregisterHMR(instance)
}
const { bum, effects, update, subTree, um, da, isDeactivated } = instance
// beforeUnmount hook
if (bum !== null) {
if (bum) {
invokeHooks(bum)
}
if (effects !== null) {
if (effects) {
for (let i = 0; i < effects.length; i++) {
stop(effects[i])
}
}
// update may be null if a component is unmounted before its async
// setup has resolved.
if (update !== null) {
if (update) {
stop(update)
unmount(subTree, instance, parentSuspense, doRemove)
}
// unmounted hook
if (um !== null) {
if (um) {
queuePostRenderEffect(um, parentSuspense)
}
// deactivated hook
if (
da !== null &&
da &&
!isDeactivated &&
instance.vnode.shapeFlag & ShapeFlags.COMPONENT_SHOULD_KEEP_ALIVE
) {
@ -1815,10 +1806,10 @@ function baseCreateRenderer<
// cause the suspense to resolve immediately if that was the last dep.
if (
__FEATURE_SUSPENSE__ &&
parentSuspense !== null &&
parentSuspense &&
!parentSuspense.isResolved &&
!parentSuspense.isUnmounted &&
instance.asyncDep !== null &&
instance.asyncDep &&
!instance.asyncResolved
) {
parentSuspense.deps--
@ -1869,7 +1860,7 @@ function baseCreateRenderer<
const renderContext = toRaw(owner.renderContext)
// unset old ref
if (oldRef !== null && oldRef !== ref) {
if (oldRef != null && oldRef !== ref) {
if (isString(oldRef)) {
refs[oldRef] = null
const oldSetupRef = renderContext[oldRef]

View File

@ -196,7 +196,7 @@ export function createBlock(
currentBlock = blockStack[blockStack.length - 1] || null
// a block is always going to be patched, so track it as a child of its
// parent block
if (currentBlock !== null) {
if (currentBlock) {
currentBlock.push(vnode)
}
return vnode
@ -239,13 +239,13 @@ export function createVNode(
}
// class & style normalization.
if (props !== null) {
if (props) {
// for reactive or proxy objects, we need to clone it to enable mutation.
if (isReactive(props) || SetupProxySymbol in props) {
props = extend({}, props)
}
let { class: klass, style } = props
if (klass != null && !isString(klass)) {
if (klass && !isString(klass)) {
props.class = normalizeClass(klass)
}
if (isObject(style)) {
@ -275,9 +275,9 @@ export function createVNode(
_isVNode: true,
type,
props,
key: props !== null && props.key !== undefined ? props.key : null,
key: props && props.key !== undefined ? props.key : null,
ref:
props !== null && props.ref !== undefined
props && props.ref !== undefined
? [currentRenderingInstance!, props.ref]
: null,
scopeId: currentScopeId,
@ -304,7 +304,7 @@ export function createVNode(
// the next vnode so that it can be properly unmounted later.
if (
shouldTrack > 0 &&
currentBlock !== null &&
currentBlock &&
// the EVENTS flag is only for hydration and if it is the only flag, the
// vnode should not be considered dynamic due to handler caching.
patchFlag !== PatchFlags.HYDRATE_EVENTS &&

View File

@ -14,7 +14,7 @@ export function patchDOMProp(
parentSuspense: any,
unmountChildren: any
) {
if ((key === 'innerHTML' || key === 'textContent') && prevChildren != null) {
if ((key === 'innerHTML' || key === 'textContent') && prevChildren) {
unmountChildren(prevChildren, parentComponent, parentSuspense)
el[key] = value == null ? '' : value
return

View File

@ -8,7 +8,7 @@ let tempSVGContainer: SVGElement
export const nodeOps: Omit<RendererOptions<Node, Element>, 'patchProp'> = {
insert: (child, parent, anchor) => {
if (anchor != null) {
if (anchor) {
parent.insertBefore(child, anchor)
} else {
parent.appendChild(child)
@ -17,7 +17,7 @@ export const nodeOps: Omit<RendererOptions<Node, Element>, 'patchProp'> = {
remove: child => {
const parent = child.parentNode
if (parent != null) {
if (parent) {
parent.removeChild(child)
}
},

View File

@ -139,7 +139,7 @@ function setText(node: TestText, text: string) {
function insert(child: TestNode, parent: TestElement, ref?: TestNode | null) {
let refIndex
if (ref != null) {
if (ref) {
refIndex = parent.children.indexOf(ref)
if (refIndex === -1) {
console.error('ref: ', ref)
@ -168,7 +168,7 @@ function insert(child: TestNode, parent: TestElement, ref?: TestNode | null) {
function remove(child: TestNode, logOp: boolean = true) {
const parent = child.parentNode
if (parent != null) {
if (parent) {
if (logOp) {
logNodeOp({
type: NodeOpTypes.REMOVE,

View File

@ -295,20 +295,20 @@ function renderElementVNode(
let { props, children, shapeFlag, scopeId, dirs } = vnode
let openTag = `<${tag}`
if (dirs !== null) {
if (dirs) {
props = applySSRDirectives(vnode, props, dirs)
}
if (props !== null) {
if (props) {
openTag += ssrRenderAttrs(props, tag)
}
if (scopeId !== null) {
if (scopeId) {
openTag += ` ${scopeId}`
const treeOwnerId = parentComponent && parentComponent.type.__scopeId
// vnode's own scopeId and the current rendering component's scopeId is
// different - this is a slot content node.
if (treeOwnerId != null && treeOwnerId !== scopeId) {
if (treeOwnerId && treeOwnerId !== scopeId) {
openTag += ` ${treeOwnerId}-s`
}
}
@ -316,7 +316,7 @@ function renderElementVNode(
push(openTag + `>`)
if (!isVoidTag(tag)) {
let hasChildrenOverride = false
if (props !== null) {
if (props) {
if (props.innerHTML) {
hasChildrenOverride = true
push(props.innerHTML)