anchor: any,
parentComponent: ComponentInternalInstance | null,
): GenericComponentInstance // VaporComponentInstance
- update(n1: VNode, n2: VNode): void
+ update(n1: VNode, n2: VNode, shouldUpdate: boolean): void
unmount(vnode: VNode, doRemove?: boolean): void
move(vnode: VNode, container: any, anchor: any): void
}
import {
- type GenericComponentInstance,
type Plugin,
- type VNode,
type VaporInVDOMInterface,
currentInstance,
shallowRef,
import { insert } from './block'
const vaporInVDOMInterface: VaporInVDOMInterface = {
- mount(
- vnode: VNode,
- container: ParentNode,
- anchor: Node,
- parentComponent: GenericComponentInstance | null,
- ) {
+ mount(vnode, container, anchor, parentComponent) {
const selfAnchor = (vnode.anchor = document.createComment('vapor'))
container.insertBefore(selfAnchor, anchor)
const prev = currentInstance
return instance
},
- update(n1: VNode, n2: VNode) {
+ update(n1, n2, shouldUpdate) {
n2.component = n1.component
- // TODO if has patchFlag, do simple diff to skip unnecessary updates
- ;(n2.component as any as VaporComponentInstance).rawPropsRef!.value =
- n2.props
+ if (shouldUpdate) {
+ ;(n2.component as any as VaporComponentInstance).rawPropsRef!.value =
+ n2.props
+ }
},
- unmount(vnode: VNode, doRemove?: boolean) {
+ unmount(vnode, doRemove) {
const container = doRemove ? vnode.anchor!.parentNode : undefined
unmountComponent(vnode.component as any, container)
},
- move(vnode: VNode, container: ParentNode, anchor: Node) {
+ move(vnode, container, anchor) {
insert(vnode.component as any, container, anchor)
insert(vnode.anchor as any, container, anchor)
},