Browse Source

fix(runtime-vapor): don't overridden attrs in static template

closes #253
三咲智子 Kevin Deng 1 year ago
parent
commit
39f85ecc21

+ 1 - 1
packages/runtime-vapor/src/apiCreateComponent.ts

@@ -23,7 +23,7 @@ export function createComponent(
     slots,
     slots,
     once,
     once,
   )
   )
-  setupComponent(instance, singleRoot)
+  setupComponent(instance)
 
 
   // register sub-component with current component for lifecycle management
   // register sub-component with current component for lifecycle management
   current.comps.add(instance)
   current.comps.add(instance)

+ 2 - 5
packages/runtime-vapor/src/apiRender.ts

@@ -30,10 +30,7 @@ export type Fragment = {
   [fragmentKey]: true
   [fragmentKey]: true
 }
 }
 
 
-export function setupComponent(
-  instance: ComponentInternalInstance,
-  singleRoot: boolean = false,
-): void {
+export function setupComponent(instance: ComponentInternalInstance): void {
   if (__DEV__) {
   if (__DEV__) {
     startMeasure(instance, `init`)
     startMeasure(instance, `init`)
   }
   }
@@ -97,7 +94,7 @@ export function setupComponent(
       block = []
       block = []
     }
     }
     instance.block = block
     instance.block = block
-    if (singleRoot) fallThroughAttrs(instance)
+    fallThroughAttrs(instance)
     return block
     return block
   })
   })
   reset()
   reset()

+ 7 - 1
packages/runtime-vapor/src/componentAttrs.ts

@@ -72,6 +72,12 @@ export function fallThroughAttrs(instance: ComponentInternalInstance): void {
   if (inheritAttrs === false) return
   if (inheritAttrs === false) return
 
 
   if (block instanceof Element) {
   if (block instanceof Element) {
-    renderEffect(() => setDynamicProps(block, instance.attrs))
+    // attrs in static template
+    const initial: Record<string, string> = {}
+    for (let i = 0; i < block.attributes.length; i++) {
+      const attr = block.attributes[i]
+      initial[attr.name] = attr.value
+    }
+    renderEffect(() => setDynamicProps(block, instance.attrs, initial))
   }
   }
 }
 }